我有一个单线程程序来处理源目录中的文件夹和文件。有没有办法阻止我的程序正在处理它的源文件目录中的文件夹被其他进程修改?我正在考虑在文件夹本身上放置某种独占锁的方法,所以只有我程序的进程才能使用它。
注:
我不想阻止根源目录本身,只是阻止该目录顶层的任何文件夹,我可能正在处理任何特定时刻。我仍然希望能够允许外部进程将文件夹添加到源目录,而我正在处理其他文件夹。
更新:
@Yuri - 是的,这是一个Windows程序,准确的Windows服务应用程序。
使这既具有挑战性又必要的部分原因是我需要在源目录中的单独目标目录中重新创建我正在处理的任何文件夹的结构。因此,当我的程序正在使用文件夹时,我无法修改文件夹和文件。
答案 0 :(得分:7)
编辑不要我们这个黑客,不起作用: http://itknowledgeexchange.techtarget.com/itanswers/folder-lock/
否则我会遍历foder中的所有文件,创建一个list<FileStream>
,然后在每个文件上调用Lock。这将使您对要锁定的文件进行更精细的控制。
GJ
编辑:尝试以下几点:
var locks = new List<FileStream>();
var di = new DirectoryInfo(@"C:\Test");
foreach (var file in di.GetFiles()) {
var fs = new FileStream(file.FullName, FileMode.Open);
fs.Lock(0, 0);
locks.Add(fs);
}
答案 1 :(得分:7)
锁定文件夹的方法:
1.只读它。 (包括因为人们总是尝试这个)
Con - 这实际上不起作用。在文件夹上,readonly标志用于其他目的。
2.只读取所有内容。
Con - 不会阻止某些类型的操作(例如,创建新项目)。
3.使用ACL
Con - 不会阻止管理员搞乱该文件夹。需要某些类型的权限。
4.使用特殊创建的用户启用ACL并启用文件夹加密 Con - 这真是令人恐惧。如果出现任何问题,您的数据可能会丢失。
5.重命名/移动文件夹
Con - 可以被用户愚蠢所绕过。
6. (编辑) gjvdkamp的回答:Lock Individual files
Con - 与#2一样,这仍然允许在文件夹中创建新文件。也就是说,这是 The Right Way™来做到这一点。
答案 2 :(得分:0)
我想这可能对你有用http://www.codeproject.com/KB/files/Unique_Folder_Protection.aspx
本文基本上做的是将文件夹的扩展名更改为以下
之一“{2559a1f2-21d7-11d4-BDAF-00c04f60b9f0}” “{21EC2020-3AEA-1069-A2DD-08002B30309D}” “{2559a1f4-21d7-11d4-BDAF-00c04f60b9f0}” “{645FF040-5081-101B-9F08-00AA002F954E}” “{2559a1f1-21d7-11d4-BDAF-00c04f60b9f0}” “{7007ACC7-3202-11D1-AAD2-00805FC1270E}”
并将密码存储在文件夹
中希望这有帮助
亚历
答案 3 :(得分:0)
为什么不拍摄该文件夹的新副本,对其进行处理,然后在必要时更换旧文件夹?