Meilleur auteur de réponses
Problème a la création de repertoire

Question
-
Bonjour,
Je fais des traitements de copie de fichiers de SharePoint vers le local, mais je ne vais pas parler de SharePoint (c'et juste le contexte au cas ou
Bref, je parcours une arboresence SharePoint (dossiers et docments), comme les copies de SP vers local peuvent etre faite plusieurs fois, avant de faire une copie en local, je supprime le dossier que je traite (donc son contenu) ensuite je le recrée et je fait mon traitement de copie!
seulement voila, en faisait des tests, je me suis rendu compte que certaine fois, le dossier qui contient mes documents "disparaissait"!
suite a de nombreux tests(des fois il disparait, d'autres fois non :x ), je me suis rendu compte qu'apres la suppression, le répertoire n'etait pas toujours recré! et donc plantage du traitement de copie!
Ci dessus vou avez (en rouge) mon code natif (celui qui plante).
Je me demande pourquoi?
J'ai ajouté un try/cach et il n'y a jamais d'erreur!
Je me demande s'il ne faut pas un certain temps à la création du répertoire, ce qui fait que s'il est plus lent à la création, plantage du traitement :X
if (Directory.Exists(localPath + "\\" + Folder.Name))
{
// si le dossier local d'une direction existe
// on le supprime ainsi on a toujours uniquement les fichiers présents sur SPS
Directory.Delete(localPath + "\\" + Folder.Name, true);
}
// on crée ou recrée le dossier de la direction
DirectoryInfo di = Directory.CreateDirectory(localPath + "\\" + Folder.Name);
int i = 0;
while (!di.Exists)
{
di = Directory.CreateDirectory(localPath + "\\" + Folder.Name);
i++;
}
Si vous avez des éléments de réponses sur le pourquoi du comment de ce comportement
en attendant, j'ai trouvé une astuce, j'ai ajouté dans mon code (en vert) une vérification du fichier, tant qu'il n'est pas crée, je le recrée! en y mettant un compteur je me suis rendu copte qu'il n'y passait qu'une seule fois :x
merki
Réponses
-
Bonjour,
Directory.Delete() ne marche que si le répertoire est entièrement vide ( pas de fichier, pas de sous-répertoire )
Voir :
http://msdn2.microsoft.com/en-us/library/62t64db3(VS.80).aspx
Normalement, si le répertoire n'est pas vide, il y a une exception particulière qui est lancée et qu'il faut capturer.
Je crois me rappeler qu'il peut y avoir un temps de latence entre le moment où l'on supprime un répertoire et le moment où l'on peut le recréer ( problème de cache me semble-t-il )
Sur un vieux serveur lent, j'avais dû faire une boucle sur l'existence/suppression de fichiers dans le répertoire pour être sûr d'avoir bien "vidé" le répertoire avant de le supprimer.
Bonne journée
Toutes les réponses
-
-
J'ai contourné le problème en supprimant le contenu du répertoire
Extrait de codeif (!Directory.Exists(localPath + "\\" + Folder.Name))
{
// si le dossier local d'une direction n'existe pas, on le crée
Directory.CreateDirectory(localPath + "\\" + Folder.Name);
}
else
{
//sinon on supprime tous son contenu
foreach (string f in Directory.GetFiles(localPath + "\\" + Folder.Name))
{
File.Delete(f);
}
}
mais j'aurai bien voulu comprendre le comportement que j'avais précédement! -
Bonjour,
Directory.Delete() ne marche que si le répertoire est entièrement vide ( pas de fichier, pas de sous-répertoire )
Voir :
http://msdn2.microsoft.com/en-us/library/62t64db3(VS.80).aspx
Normalement, si le répertoire n'est pas vide, il y a une exception particulière qui est lancée et qu'il faut capturer.
Je crois me rappeler qu'il peut y avoir un temps de latence entre le moment où l'on supprime un répertoire et le moment où l'on peut le recréer ( problème de cache me semble-t-il )
Sur un vieux serveur lent, j'avais dû faire une boucle sur l'existence/suppression de fichiers dans le répertoire pour être sûr d'avoir bien "vidé" le répertoire avant de le supprimer.
Bonne journée
-