我在某个位置有一个视频文件夹,比如C:\Temp。
我将整个目录连同其内容一起移动到“正在处理”文件夹中,同时我有一个从“正在处理”文件夹中读取移动的目录的爬虫,我担心在极端情况下,爬虫可能会尝试从尚未完整复制的目录中读取。
我试着自己测试它,它似乎还可以(它成功地处理了我移动的文件),但我想在进入生产设置之前验证一下这种情况。
TLDR;我在一个文件夹中有两个视频,我将它们移动到不同的位置,同时尝试使用另一个线程从该目录读取,是否可能其他线程将能够访问该目录,即使复制尚未“完成”?
发布于 2017-01-25 17:08:52
我看不出你为什么不能访问一个文件夹,而那个目录中的文件正在被移动(权限...)。如果你在一个文件夹中爬行,遇到一个由于被另一个程序复制/打开而被锁定的文件,我使用下面的扩展方法来管理它。
F=文件,c=当前尝试,m=最大尝试次数
public static bool IsFileLocked(this FileInfo f, int c, int m)
{
if (c > m) { return true; }
FileStream fs = null;
try
{
fs = f.Open(FileMode.Open, FileAccess.Read, FileShare.None);
}
catch (IOException)
{
Thread.Sleep(500);
return IsFileLocked(f, c + 1, m);
}
finally
{
fs?.Close();
}
return false;
}
在使用中
var f = new FileInfo(@"C:/Current/Path/To/File.txt");
if (f.IsFileLocked(0, 50)) {
//The file is locked.
}
https://stackoverflow.com/questions/41847274
复制相似问题