C# 移动锁定目标文件夹中的文件?

C# 移动锁定目标文件夹中的文件?,c#,asp.net,file,file-io,move,C#,Asp.net,File,File Io,Move,我使用File.Move将2GB左右的大文件从一个目录移动到另一个目录。将监视设计文件夹,如果有任何新文件,它将上载到CDN。但是我们遇到了一些部分文件上传到CDN的情况,这意味着,当相同的文件从源目录移动到目标目录时,相应的文件被上传到CDN。因此,我需要知道File.Move是否会锁定文件目标文件夹,直到文件移动完成?您的问题是目标文件夹上的Moonitor 由于您有一个大文件,复制它需要时间,因此发生的情况是: 开始移动文件 监控系统启动并开始上传至CDN 文件已上载 完成文件的移动 一种

我使用
File.Move
将2GB左右的大文件从一个目录移动到另一个目录。将监视设计文件夹,如果有任何新文件,它将上载到CDN。但是我们遇到了一些部分文件上传到CDN的情况,这意味着,当相同的文件从源目录移动到目标目录时,相应的文件被上传到CDN。因此,我需要知道File.Move是否会锁定文件目标文件夹,直到文件移动完成?

您的问题是目标文件夹上的Moonitor

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

  • 开始移动文件
  • 监控系统启动并开始上传至CDN
  • 文件已上载
  • 完成文件的移动

  • 一种缓解方法是,假设您的监控系统使用一些扩展来搜索文件—将
    MyBigFile.ext
    移动到
    MyBigFile.ext.tmp
    。完成后,将其重新命名为
    MyBigFile.ext
    ,这样在监视启动时,它将拥有完整的文件

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

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

    e、 g


    我需要弄清楚这个文件。Move,但是如果只有在任何文件被完全移动的情况下才将文件上载到CDN会更好。@GAPS我们使用CuteFTP来监视目标文件夹。因此,在将文件移动到CDN之前,我无法对其进行编程以检查该文件是否正在使用:(嗨,Sri,不确定它是否对您有帮助。您将看到异常类型,您可以尝试使用console应用程序来确保它。@NipunAmbastha他实际上正在使用它。重命名该文件可能是一个选项。让我们试试吧!
        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);
            }
        }