Copie de fichiers , creer dossier inexistants en VB ?

nico8001 Messages postés 92 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 30 juin 2010 - 30 juin 2010 à 10:05
scromania Messages postés 453 Date d'inscription dimanche 20 août 2006 Statut Membre Dernière intervention 11 janvier 2013 - 2 juil. 2010 à 16:32
Bonjour,

je travaille sur visual basic 2008 express

j'ai fait une fonction qui me permet de copier des fichiers
ces fichiers apparaissent dans une listbox et doivent etre copier sur plusieurs ordinateurs listé eux aussi dans une listbox

par exemple :
mon fichier se trouve sur un pc donc le chemin donnerai \\123.123.123.123\dossier1\dossier2\fichier.txt
et je voudrais que le fichier se copie dans les memes nom de dossier sauf que sur les autres ordi "dossier1" et "dossier2" n'existe pas
je voudrais que ma fonction me créer les dossiers inexistants et me copie le fichier voulu

voila mon code pour l'instant

For i = 0 To LB_ListeMachines.Items.Count - 1
            Try
                Try
                    For Each Item As String In LB_ListeFichier.Items
                        Try
                            Dim Filename As String = Item.Substring(Item.IndexOf(""), Item.Length - Item.IndexOf(""))
                            IO.File.Copy(Item, "\" & ChercherIP(LB_ListeMachines.Items(i)) & "\ia" & Filename, True)
                            Application.DoEvents() 'Evite le Freez de l'appli 
                        Catch copyError As IOException
                            MessageBox.Show("Erreur pour la copie des fichiers ! " & copyError.Message)
                        End Try 'MessageBox.Show( " erreur dans l'affichage de l'adresse IP )
                    Next
                Catch dirNotFound As DirectoryNotFoundException
                    MessageBox.Show(" Erreur de copie ! " & dirNotFound.Message)
                End Try
            Catch IOORE As IndexOutOfRangeException
                MessageBox.Show(" Erreur dans la liste ! " & IOORE.Message)
            End Try
        Next i
        MessageBox.Show("Copie terminée !")



Merci

5 réponses

cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
30 juin 2010 à 10:54
Salut

Avant de poser des questions, on fait des recherches parmi les codes du site, par exemple avec les mots "créer répertoire".
Bien sûr, tu ne trouveras ton cas précis de création de répertoire sur une machine distante, mais c'est à toi de l'imaginer.
Il faudra bien sûr vérifier que as les droits nécessaires à ces créations.

La première chose à faire, c'est d'isoler le chemin à créer. C'est ce que tu as fait dans cette variable mal nommée FileName, sauf qu'il faudra écarter le nom du fichier lui même pour éviter qu'il ne te crée un répertoire portant le nom du fichier.

Ensuite, comme tu le sais, il est impossible de créer toute une arborescence directement avec une seule commande; il te faudra créer les répertoires les uns après les autres, en commençant par la racine.
Bien sûr, avant de le créer, il faudra vérifier s'il existe déjà.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
nico8001 Messages postés 92 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 30 juin 2010
30 juin 2010 à 11:43
Voila ce que j'ai fait mais il me dit qu'il ne trouve pas les fichiers au lieu de les creer
comment cela se fait ?

For i = 0 To LB_ListeMachines.Items.Count - 1
            Try
                Try
                    For Each Item As String In LB_ListeFichier.Items
                        Try
                            Dim Filename As String = Item.Substring(Item.LastIndexOf(""), Item.Length - Item.LastIndexOf(""))
                            Dim Filenames As String = Item.Substring(Item.IndexOf(""), (Item.Length - Item.IndexOf("")) - (Item.Length - Item.LastIndexOf("")))
                            MsgBox(Filenames)
                            My.Computer.FileSystem.CreateDirectory(Filenames)
                            IO.File.Copy(Item, "\" & ChercherIP(LB_ListeMachines.Items(i)) & "\ia" & Filenames & Filename, True)
                            Application.DoEvents() 'Evite le Freez de l'appli 
                        Catch copyError As IOException
                            MessageBox.Show("Erreur pour la copie des fichiers ! " & copyError.Message)
                        End Try 'MessageBox.Show( " erreur dans l'affichage de l'adresse IP )
                    Next
                Catch dirNotFound As DirectoryNotFoundException
                    MessageBox.Show(" Erreur de copie ! " & dirNotFound.Message)
                End Try
            Catch IOORE As IndexOutOfRangeException
                MessageBox.Show(" Erreur dans la liste ! " & IOORE.Message)
            End Try
        Next i
        MessageBox.Show("Copie terminée !")
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
30 juin 2010 à 12:34
Nico
Je t'ai dit qu'on ne peut surement pas créer une arborescence complète de répertoire en une seule passe :
As-tu vérifié ?
Où se trouve la boucle permettant d'isoler chaque répertoire afin de
- Vérifier que ce répertoire existe déjà
- les créer, les uns après les autres ?

En français dans le texte :
Si ton chemin local est
C:\mon rép 1\mon rép 2\mon rép 3\mon fichier.txt
ta variable FileName va contenir
\mon fichier.txt
et FileNames contiendra
\mon rép 1\mon rép 2\mon rép 3
Il faut :
- que tu découpes FileNames pour isoler "mon rép 1" (attention au \ initial)
- que tu vérifies que ce répertoire existe sur ton serveur, avec une syntaxe du genre \\123.123.123.123\ia\mon rép 1
- S'il n'existe pas, le créer

Ensuite, il faut que tu isoles le répertoire suivant, "mon rép 2" et que tu fasses la même manip :
- que tu vérifies que ce répertoire existe sur ton serveur, avec une syntaxe du genre \\123.123.123.123\ia\mon rép 1\mon rép 2
Attention : il faut que le précédent répertoire (mon rép 1) soit toujours devant
- S'il n'existe pas, le créer
etc

Tu fais un CreateDirectory avec FileNames.
Ok, mais là, tu crées ces répertoires sur ta propre machine, pas sur la machine distante !!
Il faut que tu réfléchisses à ce que tu écris avant de venir dire que ça marche pas.
0
nico8001 Messages postés 92 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 30 juin 2010
30 juin 2010 à 13:26
bha en tout cas j'ai modif un peu et ca marche on peut recopier une arborescence complete...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
scromania Messages postés 453 Date d'inscription dimanche 20 août 2006 Statut Membre Dernière intervention 11 janvier 2013 9
2 juil. 2010 à 16:32
en faite en utilisant My.computer.filesysteme.copyfile(source,destination) toutes l'arbo et crées automatiquement
0