2013-03-16 89 views
1

此代码的工作:File.GetFiles或File.EnumerateFiles锁定文件?

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

这不起作用:

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

它给出了一个exepction中的第一个文件:

该进程无法访问文件“C:\ Users \ Ricardo \ Desktop \ Palomas \ IMG_20130215_134854.jpg',因为它正在被另一个进程使用。

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

+4

听起来像它已锁定在目标文件夹中给我。 'GetFiles()'和'EnumerateFiles()'绝对不会锁定文件。 – 2013-03-16 00:08:33

+0

destionation文件夹是空的,并在执行中显示源文件的路径 – 2013-03-16 00:10:02

+1

'Directory.GetFiles(sourceFolder)'返回完整路径,你不想获取文件名并与目标文件夹结合?即'File.Copy(file,Path.Combine(destinationFolder,Path.GetFileName(file));' – 2013-03-16 00:10:22

回答

2

在foreach中的一个简单的错误。

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

固定这样:

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

有同样的问题 - 一个文件夹是做Directory.GetFiles,然后通过每个文件的路径/名进入到SQL Server的调用批量加载该文件,并且是使文件被另一个进程错误锁定。它看起来像Directory.GetFiles暂时锁定文件 - 锁释放的速度取决于操作系统在文件夹所在的计算机上的速度。我认为释放锁可能只是落后一点。在我的应用程序中,在Directory.GetFiles语句之后,在其他任何事情之前放了一个30秒的暂停{Thread.Sleep(30000)},这解决了我的问题。