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