Bonjour à tous,
J'aimerais créer une petite form pour mettre à jour mon application pls simplement qu'avec les options proposées par VS (clickatonce).
J'aimerais stocker sur mon serveur dans un dossier les fichiers à télécharger (qui peuvent etre indépendants de l'exe, par exemple des images supplémentaires ou autre).
Mais j'ai du mal à lister tous les fichiers/sous dossier d'un dossier de mon serveur et ce après de nombreuses recherches.
J'aimerais que mon application regarde par exemple dans le dossier upload de mon serveur et télécharge tous les fichiers qui s'y trouvent sur l'ordinateur de l'utilisateur (si et seulement si ils sont plus récents que ceux que l'utilisateur possède).
En soit, ça doit pas etre compliqué mais après deux bonnes heures de recherches je n'ai pas trouvé grand chose.
Dans tous les cas après mes recherches j'en suis arrivé là pour compter le nombre de fichiers :
Mais ce code considère un dossier comme un fichier, il va l'ajouter dans la liste et donc il ne parcourira pas les sous dossiers, comment reconnaitre un dossier (et donc parcourir tous les sous dossiers) avec ce 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 string[] files = GetFileList(); public string[] GetFileList() { string[] downloadFiles; StringBuilder result = new StringBuilder(); WebResponse response = null; StreamReader reader = null; try { FtpWebRequest reqFTP; reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/")); reqFTP.UseBinary = true; reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword); reqFTP.Method = WebRequestMethods.Ftp.ListDirectory; reqFTP.Proxy = null; reqFTP.KeepAlive = false; reqFTP.UsePassive = false; response = reqFTP.GetResponse(); reader = new StreamReader(response.GetResponseStream()); string line = reader.ReadLine(); while (line != null) { result.Append(line); result.Append("\n"); line = reader.ReadLine(); } result.Remove(result.ToString().LastIndexOf('\n'), 1); return result.ToString().Split('\n'); } catch (Exception ex) { DialogResult M = MessageBox.Show("Erreur MAJ" + ex.Message); } }
J'ai essayé avec ListDirectoryDetails, il y a une balise <DIR> Dans le résultat mais c'est assez complexe à extraire je trouve :
Pour un dossier on a un truc du genre
"11-06-11 12:20AM <DIR> vf""
pour un fichier : "11-06-11 12:13AM 20 index.html"
De plus pour le moment je compte le nombre de fichier et j'ai une condition qui télécharge si c'est plus grand que 0. Il faudrait donc que ma fonction vérifie que la version de chaque fichier disponible sur le serveur est différente de celle locale avant d'incrémenter, pour éviter de faire une mise à jour plusieurs fois.
Il faudrait pouvoir récupérer les infos sur chaque fichier (version et taille)
Pour la taille il y a la méthode GetFileSize, mais je ne vois pas comment l'utiliser dans ce cas, un exemple serait le bienvenue.
Comment faire ?
Enfin, petit point de détail, j'ai mis tout ça dans une fonction (code pour compter le nombre, puis pour télécharger si il répond favorablement au MessageBox, j'ai appelé cette fonction dans mon form_load mais la form (avec les progress bar) ne se charge qu'après la fonction?
Merci d'avance, r0seBa
Partager