4

此代码有效:

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 锁定文件

4

2 回答 2

3

foreach 中的一个简单错误。

我试图在同一个地方复制和粘贴。

以这种方式修复:

    foreach (string file in Directory.EnumerateFiles(sourceFolder))
    {
        File.Copy(file, Path.Combine(destinationFolder, Path.GetFileName(file)), true);
    }
于 2013-03-16T00:17:04.340 回答
1

有同样的问题 - 在文件夹上执行 Directory.GetFiles,然后将每个文件路径/名称传递给 SQL Server 的调用以批量加载文件,并且文件被另一个进程错误锁定。看起来 Directory.GetFiles 会暂时锁定文件-释放锁定的速度取决于文件夹所在计算机上操作系统的速度。我认为释放锁可能会落后一点。在我的应用程序中,我在 Directory.GetFiles 语句之后和其他任何内容之前放置了 30 秒的暂停 {Thread.Sleep(30000)} - 这解决了我的问题。

于 2016-07-29T16:59:16.810 回答