2013-03-16 29 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)},這解決了我的問題。