繁体   English   中英

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

[英]How to lock a directory and prevent it from being deleted?

我需要检查目录是否存在,如果不存在则创建它,并在应用程序启动时将其锁定。 因此,只要应用程序运行,任何人都无法删除该目录。

我想我可以在它里面保存一个哑文件并保持打开状态,这样它不能被删除,但我宁愿不这样做 我该如何实现?


现在,我需要在其中写入文件时执行此操作:

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

即使在此示例中,仍然可以删除Directory.CreateDirectoryFile.Create调用之间的Directory.CreateDirectory

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

我建议您在某个地方创建一个临时文件夹,并在该处进行所有处理,一旦完成,就创建文件并将其移动到目标文件夹。 成功完成所有操作后,您可以删除您的临时文件夹。

在目录上使用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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM