是否可以以允许后续删除/重命名其父文件夹的方式打开文件?
我知道你可以这样做:
File.Open("foo.bar", FileMode.Open, FileAccess.Read, FileShare.Read | FileShare.Delete)
Run Code Online (Sandbox Code Playgroud)
这将允许在关闭文件句柄时删除文件.但是,如果它不允许删除父文件夹而没有错误.
我在框架中找不到任何东西.我是否忽略了某些内容,或者是否存在我可以互操作的原生API.
注意:在使用已删除文件的流时,我不在乎是否出现异常.事实上,这将是理想的.
更新:
所以最有希望的想法是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());
}
}
Run Code Online (Sandbox Code Playgroud)