none
Problème a la création de repertoire RRS feed

  • 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 Wink

    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
    vendredi 11 janvier 2008 08:38

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

    lundi 14 janvier 2008 10:18

Toutes les réponses

  • j'ai changé mon 1er while par
    while (!Directory.Exists(localPath + "\\" + Folder.Name))
    {
    i++;
    }

    est ça boucle a l'infini :X

    il ne le crée pas la 1ere fois
    vendredi 11 janvier 2008 09:14
  • J'ai contourné le problème en supprimant le contenu du répertoire Stick out tongue

    Extrait de code

    if (!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!
    vendredi 11 janvier 2008 09:38
  • 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

    lundi 14 janvier 2008 10:18
  • merci, effectivement j'avais souvent le probleme dans les répertoires non vide!

    pourtant j'arrivais quand meme à les supprimer Wink

    votre réponse conforte mon choix de supprimer les fichiers du répertoire!

    merki
    lundi 14 janvier 2008 10:40