Можно ли открыть файл таким образом, чтобы можно было впоследствии удалить / переименовать его родительскую папку?
Я знаю, что вы можете сделать это:
File.Open("foo.bar", FileMode.Open, FileAccess.Read, FileShare.Read | FileShare.Delete)
Что позволит удалить файл при закрытии дескриптора файла. Однако, если это не позволяет удалить родительскую папку без ошибки.
Я не смог ничего найти в рамках. Я что-то упустил или есть нативный API, к которому я могу взаимодействовать.
Примечание: мне все равно, если я получу исключение при использовании потока удаленного файла. На самом деле это было бы идеально.
UPDATE:
Итак, самой многообещающей идеей была Hardlink , однако я просто не могу заставить ее работать. Я все еще в конечном итоге с отказом в доступе, когда я пытаюсь удалить родительский каталог. Вот мой код:
class Program
{
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern bool CreateHardLink(string lpFileName, string lpExistingFileName, IntPtr lpSecurityAttributes);
static void Main(string[] args)
{
string hardLinkPath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
string realPath = @"C:\foo\bar.txt";
if (CreateHardLink(hardLinkPath, realPath, IntPtr.Zero))
{
using (FileStream stream = File.Open(hardLinkPath, FileMode.Open, FileAccess.Read, FileShare.Delete | FileShare.ReadWrite))
{
Console.Write("File locked");
Console.ReadLine();
}
File.Delete(hardLinkPath);
}
else
Console.WriteLine("LastError:{0}", Marshal.GetLastWin32Error());
}
}