v'è alcuna garanzia che la lista si ottiene, in qualsiasi punto del tempo, sta andando a rimanere lo stesso il prossimo secondo come qualcun altro potrebbe prendi il controllo del file quando torni da loro.
Vedo un modo sebbene - "BLOCCA" i file che si desidera sostituire ottenendo i corrispondenti oggetti FileStream. In questo modo sei sicuro di aver bloccato tutti i file "disponibili" aprendoli e quindi puoi sostituirli nel modo desiderato.
public void TestGivenFiles(List<string> listFiles)
{
List<FileStream> replaceAbleFileStreams = GetFileStreams(listFiles);
Console.WriteLine("files Received = " + replaceAbleFileStreams.Count);
foreach (FileStream fileStream in replaceAbleFileStreams)
{
// Replace the files the way you want to.
fileStream.Close();
}
}
public List<FileStream> GetFileStreams(List<string> listFilesToReplace)
{
List<FileStream> replaceableFiles = new List<FileStream>();
foreach (string sFileLocation in listFilesToReplace)
{
FileAttributes fileAttributes = File.GetAttributes(sFileLocation);
if ((fileAttributes & FileAttributes.ReadOnly) != FileAttributes.ReadOnly)
{ // Make sure that the file is NOT read-only
try
{
FileStream currentWriteableFile = File.OpenWrite(sFileLocation);
replaceableFiles.Add(currentWriteableFile);
}
catch
{
Console.WriteLine("Could not get Stream for '" + sFileLocation+ "'. Possibly in use");
}
}
}
return replaceableFiles;
}
Detto questo, è meglio provare a sostituirli uno per uno e ignorare quelli che non è possibile.
fonte
2009-07-24 08:34:54
duplidate di http://stackoverflow.com/questions/1304/how-to-check-for-file-lock-in-c – TheVillageIdiot