我有一个单线程程序来处理源目录中的文件夹和文件.有没有办法阻止我的程序正在处理它的源文件目录中的文件夹被其他进程修改?我正在考虑在文件夹本身上放置某种独占锁的方法,所以只有我程序的进程才能使用它.
注意:
我不想阻止根源目录本身,只是在该目录的顶层中的任何文件夹,我可能在任何特定时刻处理.我仍然希望能够允许外部进程将文件夹添加到源目录,而我正在处理其他文件夹.
更新:
@Yuri - 是的,这是一个Windows程序,准确的Windows服务应用程序.
使这既具有挑战性又必要的部分原因是我需要在源目录中的单独目标目录中重新创建我正在处理的任何文件夹的结构.因此,当我的程序正在使用文件夹时,我无法修改文件夹和文件.
编辑不要我们这个黑客,不起作用: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);
}
Run Code Online (Sandbox Code Playgroud)
锁定文件夹的方法:
1.只读它.(包括因为人们总是尝试这个)
Con - 这实际上不起作用. 在文件夹上,只读标志用于其他目的.
2.只读取所有内容.
Con - 不会阻止某些类型的操作(例如,创建新项目).
3.使用ACL
Con - 不会阻止管理员弄乱该文件夹.需要某些类型的权限.
4.使用特殊创建的用户访问ACL并启用文件夹加密.
Con - 这真是令人恐惧.如果出现任何问题,您的数据可能会丢失.
5.重命名/移动文件夹
Con - 可以被用户愚蠢的旁路.
6. (编辑) gjvdkamp的答案:锁定单个文件
Con - 与#2一样,这仍然允许在文件夹中创建新文件.也就是说,这是The Right Way™.