Я хочу скопировать папку и сначала хочу удалить папку назначения.Поэтому я удаляю папку назначения, затем воссоздаю ее и затем копирую файлы.Проблема в том, что я получаю An unhandled exception of type 'System.IO.DirectoryNotFoundException' occurred in 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);
}.......
Таким образом, вы ждете с созданием, пока процесс удаления не будетзаконченный.Всем спасибо и особенно Саиду.