C# 将文件的目录移动到其他目录时是否可以访问文件?
我在某个位置有一个视频文件夹,比如C:\Temp 我将整个目录及其内容移动到一个“正在处理”文件夹中,同时我有一个爬虫程序从“正在处理”文件夹中读取移动的目录,我担心在极端情况下,爬虫程序可能会尝试从尚未完整复制的目录中读取 我自己也试过测试它,看起来还可以(它成功地处理了我移动的文件),但我想在移动到生产设置之前验证这种情况C# 将文件的目录移动到其他目录时是否可以访问文件?,c#,directory,filesystems,locking,C#,Directory,Filesystems,Locking,我在某个位置有一个视频文件夹,比如C:\Temp 我将整个目录及其内容移动到一个“正在处理”文件夹中,同时我有一个爬虫程序从“正在处理”文件夹中读取移动的目录,我担心在极端情况下,爬虫程序可能会尝试从尚未完整复制的目录中读取 我自己也试过测试它,看起来还可以(它成功地处理了我移动的文件),但我想在移动到生产设置之前验证这种情况 TLDR;我在一个文件夹中有两个视频,我将它们移动到另一个位置,同时尝试使用另一个线程从该目录中读取,即使复制尚未“完成”,另一个线程是否可能访问该目录?我看不出有什么理
TLDR;我在一个文件夹中有两个视频,我将它们移动到另一个位置,同时尝试使用另一个线程从该目录中读取,即使复制尚未“完成”,另一个线程是否可能访问该目录?我看不出有什么理由在移动文件夹中的文件时无法访问该文件夹(除了权限…)。如果你在一个文件夹中爬行,遇到一个由于被另一个程序复制/打开而被锁定的文件,我将使用下面的扩展方法来管理它 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.
}
您可以从该目录中读取,但我怀疑由于文件锁定,正在复制的文件将无法访问。我想如果您只是读取新位置,一切都应该正常,除非文件夹本身不存在。但是被复制的文件可能会被锁定,从而妨碍您从新目录中读取它们。那么,我将问一个不同的问题,是否可以在锁定整个目录的同时移动目录,直到复制结束?