打开文件没有(真的)锁定它?

Gre*_*ean 7 .net c# interop

是否可以以允许后续删除/重命名其父文件夹的方式打开文件?

我知道你可以这样做:

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)

Gre*_*ean 0

我能想到的最佳解决方案是将文件复制到临时暂存位置。然后,打开临时文件,完成后将其删除。