如何锁定目录并防止其被删除?

时间:2012-10-08 15:30:38

标签: c# .net file directory

我需要检查一个目录是否存在,如果不存在则创建它并在我的应用程序启动时锁定它。因此,只要应用程序运行,就没有人可以删除该目录。

我想我可以在其中保存一个哑文件并保持打开,因此无法删除但我不想如果可能的话。我怎样才能做到这一点?


现在,只要我需要在其中编写文件,我就会这样做:

if (!Directory.Exists(path))
    Directory.CreateDirectory(path);

即使在此示例中,仍然可以删除Directory.CreateDirectoryFile.Create来电之间的目录。

3 个答案:

答案 0 :(得分:0)

在目录中创建一个虚拟临时文件,并在程序生命周期内保持打开状态。这样,任何试图删除目录的人都会得到正在使用的"目录"错误消息,无法删除它。

答案 1 :(得分:0)

我建议你在某个地方创建一个临时文件夹,然后在那里进行处理,一旦完成创建并将文件移动到目标文件夹。每次成功完成后,您都可以删除临时文件夹。

答案 2 :(得分:0)

在dir上使用CreateFile WINAPI函数。没有经过测试,但我认为它会起作用。

[DllImport("kernel32.dll", SetLastError = true)]
        private static extern SafeFileHandle CreateFile(
            string lpFileName,
            FileAccess dwDesiredAccess,
            FileShare dwShareMode,
            IntPtr lpSecurityAttributes,
            FileMode dwCreationDisposition,
            int dwFlagsAndAttributes,
            IntPtr hTemplateFile);

const int FILE_FLAG_BACKUP_SEMANTICS = 0x02000000;
var dirlock = CreateFile("C:\\mydir", FileAccess.Read, FileShare.None, IntPtr.Zero, FileMode.Open,
                                     FILE_FLAG_BACKUP_SEMANTICS, IntPtr.Zero);