IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Effacer un dossier et son contenu de maniere récursive sur serveur FTP


Sujet :

C#

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 17
    Points : 9
    Points
    9
    Par défaut Effacer un dossier et son contenu de maniere récursive sur serveur FTP
    Bonjour à tous,
    Alors comme l'énonce le titre de ce post, je chercher à supprimer un dossier ainsi que l'intégralité de son contenu(pouvant contenir multiples dossiers et fichiers).
    J'ai donc créé ma méthode qui permets de lister tout un dossier, la suppression des fichiers est simple mais je suis bloqué quand il s'agit de supprimer un dossier une fois vide : voilà mon code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    public bool FtpDeleteDirectory(string dirPath)
            {
                Uri srvUri = new Uri("ftp://" + this.hostname + "/" + dirPath);
                FtpWebRequest myRequest = initRequest(srvUri);
    
                if (FtpListDetailsDirectory(dirPath) != "")
                {
                    FtpInitializeRemoval(dirPath);
                    Console.WriteLine("dossier non vide");
                }
    
                 myRequest.Method = WebRequestMethods.Ftp.RemoveDirectory;
    
                return true;
            }
    
            private void FtpInitializeRemoval(string dirPath)
            {
                Uri srvUri = new Uri("ftp://" + this.hostname + "//");
                initRequest(srvUri);
                TreeNode initialNode;
                TreeView tree = new TreeView();
                string initialDir = dirPath;
                tree.Nodes.Add(initialDir);
                initialNode = tree.Nodes[0];
                FtpDeleteContentDirectory(initialNode, tree);
            }
    
    
            private void FtpDeleteContentDirectory(TreeNode NodePass, TreeView tree)
            {
                string directory = NodePass.FullPath;
                Uri servUri = new Uri("ftp://" + this.hostname + "/" + directory + "/");
    
                try
                {
                    // lecture en détails
                    FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(servUri);
                    request.Credentials = new NetworkCredential(this.username, this.password);
                    request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
                    FtpWebResponse response = (FtpWebResponse)request.GetResponse();
                    Stream responseStream = response.GetResponseStream();
                    StreamReader reader = new StreamReader(responseStream);
                    string listBrute = reader.ReadToEnd();
                    string[] cut = { Environment.NewLine };
                    string[] dirListDetails = listBrute.Split(cut, StringSplitOptions.RemoveEmptyEntries);
                    reader.Close();
    
                    // lecture simple
                    FtpWebRequest request2 = (FtpWebRequest)FtpWebRequest.Create(servUri);
                    request2.Credentials = new NetworkCredential(this.username, this.password);
                    request2.Method = WebRequestMethods.Ftp.ListDirectory;
                    FtpWebResponse response2 = (FtpWebResponse)request2.GetResponse();
                    Stream responseStream2 = response2.GetResponseStream();
                    StreamReader reader2 = new StreamReader(responseStream2);
                    string listSimple = reader2.ReadToEnd();
                    string[] listNameDir = listSimple.Split(cut, StringSplitOptions.RemoveEmptyEntries);
                    reader2.Close();
    
                    for (int i = 0; i < dirListDetails.Length; i++)
                    {
                        foreach (string s in listNameDir)
                        {
                            if (dirListDetails[i].StartsWith("d") && dirListDetails[i].Contains(s))
                            {
                                TreeNode childNode = new TreeNode(new DirectoryInfo(s).Name);
                                NodePass.Nodes.Add(childNode);
                                //LocalManageDirectory(NodePass.FullPath + "\\" + Path.GetFileName(s));
                                FtpDeleteContentDirectory(childNode, tree);
                            }
                            else if (dirListDetails[i].StartsWith("-") && dirListDetails[i].Contains(s))
                            {
                                NodePass.Nodes.Add(s);
                                Console.WriteLine(NodePass.FullPath);
                                string test = NodePass.FullPath + "/" + s;
                               FtpDeleteFile(test);
                                string fullDirectory = NodePass.FullPath;
                                if (FtpListDetailsDirectory(fullDirectory) == "")
                                {
                                    FtpDeleteDirectory(fullDirectory);
                                }
    
                            }
                        }
                    }
                }
                catch (WebException e)
                {
                    throw new DirectoryNotFound(Path.GetFileName(directory), e);
                }
                catch (Exception)
                {
                    throw new Exception();
                }
            }
    JE vous ai mis la partie du code en rouge qui selon moi pose problème pour la suppression d'un dossier une fois celui-ci vide. Si vous pouviez m'aider à résoudre ce problème, ce serait vraiment génial :p

  2. #2
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 105
    Points : 63
    Points
    63
    Par défaut
    salut !

    Pour supprimer un dossier vide, la commande ftp est

    bonne continuation,
    naga

  3. #3
    Membre éprouvé Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Points : 958
    Points
    958
    Par défaut
    Quelle est ton erreur lorsque tu essaie d'effacer un répertoire? N'oublies pas qu'en FTP tu ne peux effacer un répertoire qui n'est pas vide. Et que dans ce répertoire peuvent se trouver des fichiers cachés...

  4. #4
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 105
    Points : 63
    Points
    63
    Par défaut
    re,

    je viens de trouver aussi :

    mais ça ne marche que si la possibilité de faire du rm récursif est configurée sur le serveur (à vérifier en fonction de ton hébergeur)


    [EDIT]
    PS : vérifie aussi les droit d'accès aux répertoires\fichiers. Si il y a un fichier caché, le droits d'accès sont peu être restreints. Il te faudra alors les changer.

    pour donner un contrôle total à un utilisateur :

    Sous linux (pour tous):

    Sous windows (pour user):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cacls monfichier /G user:F

    [/EDIT]

  5. #5
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par neptune Voir le message
    Quelle est ton erreur lorsque tu essaie d'effacer un répertoire? N'oublies pas qu'en FTP tu ne peux effacer un répertoire qui n'est pas vide. Et que dans ce répertoire peuvent se trouver des fichiers cachés...
    Je n'ai pas d'erreur, en fait j'arrive a effacer tous les fichiers de tous les dossiers mais aprés, je cherche un moyen d'intégrer a cette fonction directement, la suppression du dossier une fois vide

Discussions similaires

  1. Fonction pour copier un dossier et son contenu
    Par wassimbik dans le forum Langage
    Réponses: 2
    Dernier message: 15/04/2009, 11h28
  2. effacer un fichier ou son contenu
    Par yvesall dans le forum C
    Réponses: 16
    Dernier message: 09/05/2007, 21h04
  3. Réponses: 3
    Dernier message: 20/04/2007, 22h58
  4. Dupliquer un dossier et son contenu
    Par Bne dans le forum Langage
    Réponses: 5
    Dernier message: 30/05/2006, 15h36
  5. [C#] Dossier et son contenu.
    Par GéniuS77 dans le forum Windows Forms
    Réponses: 13
    Dernier message: 12/10/2004, 11h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo