将目录移动到另一个目录时是否可以访问文件?

时间:2017-01-25 09:01:28

标签: c# directory filesystems locking

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

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

我自己尝试过测试它似乎没问题(它处理了我成功移动的文件)但是我想在转移到生产环境之前验证这种情况。

TLDR;我在一个文件夹中有两个视频,我将它们移动到另一个位置,同时尝试从另一个线程读取该目录,是否有可能其他线程将能够访问该目录,即使该副本尚未“完成” “?

1 个答案:

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