Système.IO.DirectoryNotFoundException après la suppression d'un dossier vide et le recréer

Je veux copier un dossier, et je veux supprimer le dossier de destination première.
Donc, je suis à la suppression de dossier de destination puis de le recréer et puis copier les fichiers.
Le problème est que je reçois le An unhandled exception of type 'System.IO.DirectoryNotFoundException' occurred in mscorlib.dll
lorsque vous essayez de copier des fichiers. C'est le code

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);
}.......

- Je obtenir de l'exception dans cette ligne FileInfo fileinfo = new FileInfo(dest);.

Il semble que il ya un retard dans la création du dossier et dans le temps, j'essaye de copier un fichier. Aucune idée, quel est le problème? Le plein de message d'exception:

Une exception non gérée du type
'Système.IO.DirectoryNotFoundException'
s'est produite dans mscorlib.dll

Informations supplémentaires: impossible de trouver
une partie du chemin
'C:\Users\joe\Desktop\destfolder\.buildpath'.

SOLUTION

Comme il été souligné par les gens de bien, la raison de cette exception est que j'essaie de recréer le dossier avant le processus de suppression est terminé.
Donc la solution est d'ajouter 2 lignes de code après suppression:

GC.Collect();
GC.WaitForPendingFinalizers();

donc le bon code sera

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);
}.......

De cette façon, vous attendez avec la création jusqu'à ce que le processus de suppression est terminé.
Yhanks tout le monde et surtout Saeed.

Peut-être seulement de supprimer le contenu du dossier, s'il existe?
Êtes-vous sûr que le fichier est copié? Je vous suggère un peu de débogage de code où vous la sortie de la source et de la destination des noms de fichiers avant de faire la copie, puis afficher un message qui dit, "Fichier copié" une fois la copie terminée. Il semble peu probable que la copie terminée avec succès, puis l'appel à FileInfo constructeur échouer.
Lorsque vous déboguez ce, quelle est la valeur de dest sur la ligne qui lance l'exception? Quelles sont les valeurs des autres variables pertinentes?
si le dossier de destination n'existe pas et je le lance ,il n'y a pas de problème. mais si le dossier existe et il est vide - puis-je obtenir de l'exception. dest = "C:\\Users\\.....\\Desktop\\destfolder\\.buildpath"
Quel est votre message d'exception? Je pense qu'il y a un problème de sécurité, d'offrir le plein de message d'exception

OriginalL'auteur yossi | 2010-11-18

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *