Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# File.GetFiles或File.EnumerateFiles是否锁定文件?_C#_File - Fatal编程技术网

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手动复制它们…但是当实用程序执行时,相同的文件总是以锁定状态返回。