2

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

我想我可以在其中保存一个哑文件并保持打开状态,这样它就不能被删除,但如果可能的话,我不希望这样做。我怎样才能做到这一点?


现在,每当我需要在其中写入文件时,我都会这样做:

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

即使在这个例子中,仍然可以删除调用之间Directory.CreateDirectory的目录。File.Create

4

3 回答 3

0

我建议您在某处创建一个临时文件夹并在那里进行所有处理,一旦完成创建并将您的文件移动到目标文件夹。一旦每件事都成功完成,您就可以删除您的临时文件夹。

于 2012-10-08T17:17:24.213 回答
0

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

于 2012-10-08T17:06:05.663 回答
0

在目录上使用 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);
于 2012-10-08T17:23:27.523 回答