我撰寫了一段代碼來將檔案從一個地方復制到另一個地方。在此之前,我想檢查源和目標中存在的檔案的檔案名是否不同。如果存在洗掉該檔案。
為此,我撰寫了以下代碼。在這里,一旦找到具有相同名稱的檔案,下一個回圈就會失敗。
這是錯誤'集合已修改; 列舉操作可能無法執行。
請有人幫助我完成這部分
var directory = new DirectoryInfo(@"\\Shared\Log\Testing\");
var files = (from f in directory.GetFiles()
where f.CreationTime >= fromdate && f.CreationTime <= todate
select f).ToList();
var localdirectory = new DirectoryInfo(@"C:\Users\Desktop\Test\");
var localfiles = (from f in localdirectory.GetFiles()
select f).ToList();
foreach (var file in files)
{
foreach (var localfile in localfiles)
{
if (file.Name == localfile.Name)
{
files.Remove(file);
Console.WriteLine(file.Name "- File already exists");
}
}
}
uj5u.com熱心網友回復:
而不是從共享目錄中洗掉檔案,只需過濾串列,然后執行復制操作,
//UniqueFiles contains all files that are not present in the localFiles.
var uniqueFiles = files
.Where(x => !localfiles.Any(localFile => localFile.Name == x.Name));
為什么您收到錯誤“'集合已修改;列舉操作可能無法執行。'”?
- 您正在迭代
files(第一個foreach回圈)和內部if條件,您正試圖從files串列中洗掉一個檔案。 files.Remove(file);從串列中洗掉檔案,這是修改可列舉的。- C# 不支持迭代其中正在更改的可列舉,它通過上述錯誤
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/509943.html
標籤:C#。网
