文件.GetFiles或File.EnumerateFiles锁定文件

本文关键字:文件 锁定 EnumerateFiles GetFiles File | 更新日期: 2023-09-27 18:04:15

代码正常运行:

File.Copy(file, Path.Combine(destinationFolder, file), true);

这行不通:

foreach (string file in Directory.GetFiles(sourceFolder))
{
    File.Copy(file, Path.Combine(destinationFolder, file), true);
}

在第一个文件中给出一个异常:

进程无法访问文件"C:'Users'Ricardo'Desktop'Palomas'IMG_20130215_134854.jpg",因为该文件正在被其他进程使用。

为什么?看起来像Directory。GetFiles或Directory。EnumerateFiles锁定文件

文件.GetFiles或File.EnumerateFiles锁定文件

foreach中的一个简单错误。

我想复制粘贴到同一个地方。

修复:

    foreach (string file in Directory.EnumerateFiles(sourceFolder))
    {
        File.Copy(file, Path.Combine(destinationFolder, Path.GetFileName(file)), true);
    }

有同样的问题-正在做目录。GetFiles在一个文件夹上,然后传递每个文件的路径/名称到一个调用SQL Server来批量加载文件,并得到文件被另一个进程错误锁定。看起来像Directory。GetFiles暂时锁定文件——释放锁的速度取决于文件夹所在机器上的操作系统有多快。我觉得开锁可能有点晚了。在我的应用程序中,我在目录之后放置了30秒的暂停{Thread.Sleep(30000)}。