我在某个位置有一个视频文件夹,比如C:\ Temp。
我将整个目录及其内容移动到“处理”文件夹,同时我有一个从“处理”文件夹中读取移动目录的爬虫,我担心在极端情况下,爬虫可能会尝试从尚未完整复制的目录中读取。
我自己尝试过测试它似乎没问题(它处理了我成功移动的文件)但是我想在转移到生产环境之前验证这种情况。
TLDR;我在一个文件夹中有两个视频,我将它们移动到另一个位置,同时尝试从另一个线程读取该目录,是否有可能其他线程将能够访问该目录,即使该副本尚未“完成” “?
答案 0 :(得分:1)
我认为没有理由为什么在移动该目录中的文件时将无法访问文件夹(除了权限...)。如果您正在浏览文件夹并遇到由于被其他程序复制/打开而被锁定的文件,我使用以下作为扩展方法来管理它。
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.
}