我可以在调用File.Copy()之前锁定文件吗?

时间:2017-05-30 10:46:22

标签: c#

我想通过覆盖将文件从一个目录复制到另一个目录。为了保持一致性,我想在复制之前锁定所有目标文件,覆盖它们,然后解锁。

This question建议使用FileStream进行锁定。但是,FileStream.Lock()FileShare.None同时锁定此进程中的文件,使File.Copy()抛出IOException

这是一个MVCE:

using System.Collections.Generic;
using System.IO;

namespace Test1
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var oldDir = @"c:\old\";
            var newDir = @"c:\new\";

            var locks = new List<FileStream>();
            foreach (var item in Directory.EnumerateFiles(newDir))
            {
                var newLock = new FileStream(item, FileMode.Open, FileAccess.Read, FileShare.None);
                locks.Add(newLock);
            }

            foreach (var item in Directory.EnumerateFiles(oldDir))
            {
                var dest = Path.Combine(newDir, Path.GetFileName(item));
                File.Copy(item, dest, true);
            }
        }
    }
}

使用相同的FileStream复制唯一方式,还是可以使用File.Copy()?怎么样?

0 个答案:

没有答案