1

File.Move用来将大约 2GB 的大文件从一个目录移动到另一个目录。目标文件夹被监控,如果有任何新文件,它将被上传到 CDN。但是我们经历了一些部分文件上传到 CDN,这意味着,当同一个文件从源目录移动到目标目录时,相应的文件被上传到了 CDN。所以,我需要知道 File.Move 是否会锁定文件目标文件夹,直到文件完成移动?

4

2 回答 2

1

您的问题是目标文件夹上的监视。

由于您有一个大文件,因此复制它需要时间,所以发生的事情是:

  1. 你开始移动文件
  2. 监控系统启动并开始上传到 CDN
  3. 文件被部分上传
  4. 您完成了文件的移动。

对此的一种缓解方法是,假设您的监控系统搜索具有一些扩展名的文件 - 移动MyBigFile.extMyBigFile.ext.tmp. 完成后,将其重命名MyBigFile.ext

于 2013-06-13T12:45:00.063 回答
1

为了避免部分上传到 CDN,您可以做的是在移动它时先隐藏它,然后在它完全完成后取消隐藏它。如果文件仍然隐藏,请让监控工具 不要将其传输到 CDN 。

或者您可以将其锁定,以便其他进程(这是您的监控工具——CuteFTP)在流完成之前无法访问目标文件。

例如

    static void Main(string[] args)
    {
        string sourcePath = "mytext.txt";
        string destPath = @"dest\mytext.txt";
        using (FileStream sourceStream = new FileStream(sourcePath, FileMode.Open))
        {
            using (FileStream destStream = new FileStream(destPath, FileMode.Create))
            {
                destStream.Lock(0, sourceStream.Length);
                sourceStream.CopyTo(destStream);
            }
        }

        if (File.Exists(sourcePath))
        {
            File.Delete(sourcePath);
        }
    }
于 2013-06-13T12:45:41.330 回答