Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将文件的目录移动到其他目录时是否可以访问文件?_C#_Directory_Filesystems_Locking - Fatal编程技术网

C# 将文件的目录移动到其他目录时是否可以访问文件?

C# 将文件的目录移动到其他目录时是否可以访问文件?,c#,directory,filesystems,locking,C#,Directory,Filesystems,Locking,我在某个位置有一个视频文件夹,比如C:\Temp 我将整个目录及其内容移动到一个“正在处理”文件夹中,同时我有一个爬虫程序从“正在处理”文件夹中读取移动的目录,我担心在极端情况下,爬虫程序可能会尝试从尚未完整复制的目录中读取 我自己也试过测试它,看起来还可以(它成功地处理了我移动的文件),但我想在移动到生产设置之前验证这种情况 TLDR;我在一个文件夹中有两个视频,我将它们移动到另一个位置,同时尝试使用另一个线程从该目录中读取,即使复制尚未“完成”,另一个线程是否可能访问该目录?我看不出有什么理

我在某个位置有一个视频文件夹,比如C:\Temp

我将整个目录及其内容移动到一个“正在处理”文件夹中,同时我有一个爬虫程序从“正在处理”文件夹中读取移动的目录,我担心在极端情况下,爬虫程序可能会尝试从尚未完整复制的目录中读取

我自己也试过测试它,看起来还可以(它成功地处理了我移动的文件),但我想在移动到生产设置之前验证这种情况


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.                 
}

您可以从该目录中读取,但我怀疑由于文件锁定,正在复制的文件将无法访问。我想如果您只是读取新位置,一切都应该正常,除非文件夹本身不存在。但是被复制的文件可能会被锁定,从而妨碍您从新目录中读取它们。那么,我将问一个不同的问题,是否可以在锁定整个目录的同时移动目录,直到复制结束?