Я хочу скопировать папку, и я хочу сначала удалить папку назначения.
Итак, я удаляю папку назначения, затем воссоздаю ее, а затем копирую файлы.
Проблема в том, что я получаю Необработанное исключение типа «System.IO.DirectoryNotFoundException» в mscorlib.dll
при попытке скопировать файлы. Это код
static public void CopyFolder(string sourceFolder, string destFolder)
{
if (Directory.Exists(destFolder)) // check if folde exist
{
Directory.Delete(destFolder, true); // delete folder
}
Directory.CreateDirectory(destFolder); // create folder
string[] files = Directory.GetFiles(sourceFolder);
foreach (string file in files)
{
string name = Path.GetFileName(file);
string dest = Path.Combine(destFolder, name);
File.Copy(file, dest, true);
FileInfo fileinfo = new FileInfo(dest); // get file attrib
if (fileinfo.Attributes != FileAttributes.ReadOnly) // check if read only
File.SetAttributes(dest, FileAttributes.Normal);
}.......
Я получаю исключение в этой строке FileInfo fileinfo = new FileInfo (dest);
.
Похоже, есть задержка в создании папки и в среднем раз пытаюсь скопировать в него файл. Есть подсказка, в чем проблема? Полное сообщение об исключении:
Необработанное исключение типа 'System.IO.DirectoryNotFoundException' возникла в mscorlib.dll
Дополнительная информация: Не удалось найти часть пути 'C: \ Users \ joe \ Desktop \ destfolder \ .buildpath'.
Как было указано хорошими людьми, причина этого исключения заключается в том, что я пытаюсь воссоздать папку до завершения процесса удаления .
Итак, решение - добавить 2 строки кода после удаления:
GC.Collect ();
GC.WaitForPendingFinalizers ();
, поэтому правильный код будет
static public void CopyFolder(string sourceFolder, string destFolder)
{
if (Directory.Exists(destFolder)) // check if folde exist
{
Directory.Delete(destFolder, true); // delete folder
GC.Collect(); // CODE ADDED
GC.WaitForPendingFinalizers(); // CODE ADDED
}
Directory.CreateDirectory(destFolder); // create folder
string[] files = Directory.GetFiles(sourceFolder);
foreach (string file in files)
{
string name = Path.GetFileName(file);
string dest = Path.Combine(destFolder, name);
File.Copy(file, dest, true);
FileInfo fileinfo = new FileInfo(dest); // get file attrib
if (fileinfo.Attributes != FileAttributes.ReadOnly) // check if read only
File.SetAttributes(dest, FileAttributes.Normal);
}.......
Таким образом, вы ждете с созданием, пока процесс удаления не завершится. Спасибо всем, и особенно Саиду.