C# File.GetFiles或File.EnumerateFiles是否锁定文件?
此代码适用于:C# File.GetFiles或File.EnumerateFiles是否锁定文件?,c#,file,C#,File,此代码适用于: 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\
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锁定文件,这是foreach中的一个简单错误 我试着在同一个地方复制和粘贴 修正方法如下:
foreach (string file in Directory.EnumerateFiles(sourceFolder))
{
File.Copy(file, Path.Combine(destinationFolder, Path.GetFileName(file)), true);
}
也有同样的问题-在文件夹上执行Directory.GetFiles,然后将每个文件路径/名称传递给SQL Server以大容量加载该文件,并被另一个进程错误锁定了该文件。看起来Directory.GetFiles会暂时锁定文件-释放锁定的速度取决于文件夹所在机器上的操作系统速度。我认为释放锁可能只是落后了一点。在我的应用程序中,我在Directory.GetFiles语句之后和其他任何语句之前放置了一个30秒的暂停{Thread.Sleep(30000)},这解决了我的问题。听起来好像它被锁定在了目标文件夹中
GetFiles()
和EnumerateFiles()
绝对不会锁定文件。目标文件夹为空,在执行选项中显示源文件目录的路径。GetFiles(sourceFolder)
返回完整路径,是否要获取文件名并与目标文件夹合并?i、 e.File.Copy(File,Path.Combine(destinationFolder,Path.GetFileName(File));
注意目录.GetFiles()
返回一个字符串[]
因此,到那时它实际上并没有触及文件,你只有一个字符串数组。它必须被锁定在其他地方;没有其他解释。有趣的是,我也有同样的问题。我有文件列表,有时给定的列表将是*
或*.
或*.xyz
,我有一个单独的我thod调用,该调用将这些路径扩展到实际文件和子目录等。稍后(通常为10-20秒),当另一个方法从列表中读取这些文件路径时,它们被锁定。它们未被操作系统锁定(位于共享UNC路径上),我可以通过Windows手动复制它们…但是当实用程序执行时,相同的文件总是以锁定状态返回。