Liste le contenu d'un repertoire dans un fichier texte

AReS097
Messages postés
24
Date d'inscription
mercredi 11 mars 2009
Statut
Membre
Dernière intervention
14 janvier 2021
- 28 sept. 2017 à 13:52
vb95
Messages postés
2634
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
27 mai 2022
- 1 oct. 2017 à 23:31
Bonjour,

Je souhaite lister les contenue d'un répertoire, et mettre les nom de tous les dossier qu'il contient dans un fichier texte (1 répertoire = 1 ligne du fichier texte)

Merci a vous
--

4 réponses

vb95
Messages postés
2634
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
27 mai 2022
151
28 sept. 2017 à 14:46
1
cs_JMO
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
Modifié le 30 sept. 2017 à 01:49
Bonjour à tous,

En suivant les conseils avisés de vb95 (que je salue) d'utiliser la classe Directory, j'obtiens:
Option Strict On
Option Explicit On

Imports System.IO

Public Class ListeRepertoire

    Dim RepertoireInitial As String = CStr(Environment.SpecialFolder.MyDocuments)
    Dim myFileList As String = Environment.GetFolderPath(CType(RepertoireInitial, Environment.SpecialFolder)) & "\ListeRepertoire.txt"
    Dim myArrayList As New ArrayList()

    Public Shared Sub Main()
        Application.Run(New ListeRepertoire())
    End Sub

    Sub ListeArborescenceDossier(ByVal RepertoireActuel As String)
        For Each Repertoire As String In Directory.GetDirectories(RepertoireActuel)
            myArrayList.Add(Repertoire)
            ListeArborescenceDossier(Repertoire)
        Next
    End Sub

    Sub EcrireFichier()
        Dim sw As New StreamWriter(myFileList)
        sw.WriteLine(String.Join(Environment.NewLine, (DirectCast(myArrayList.ToArray(GetType(String)), String()))))
        sw.Close()
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        For Each Repertoire As String In Directory.GetDirectories(Environment.GetFolderPath(CType(RepertoireInitial, Environment.SpecialFolder)))
            myArrayList.Add(Repertoire)
            Try
                ListeArborescenceDossier(Repertoire)
            Catch ex As Exception
                Continue For
            End Try
        Next
        EcrireFichier()
        MessageBox.Show("fichier " & myFileList & " créé")
    End Sub

End Class

Code à adapter car j'initialise la variable RepertoireInitial avec le répertoire "Mes Documents". J'ai utilisé un Try ... Catch pour éviter les erreurs dues aux dossiers protégés.

jean-marc
1
vb95
Messages postés
2634
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
27 mai 2022
151
30 sept. 2017 à 01:23
Salutations à vous aussi !
0
cs_JMO
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26 > vb95
Messages postés
2634
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
27 mai 2022

30 sept. 2017 à 01:53
Bonjour vb95,
J'ai modifié la façon d'écrire le fichier txt en utilisant un Join de l'ArrayList.
Est-ce une bonne méthode ???
0
Whismeril
Messages postés
17345
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
26 mai 2022
596
30 sept. 2017 à 08:27
Bonjour
il y a beaucoup plus simple
        Private Sub ContenuRep(ByVal DossierSource As String)
            If Not Directory.Exists(DossierSource) Then 'on teste si le repertoire existe
                Return
            End If

            File.WriteAllLines("C:\temp\ListeDesDossiers.Txt", Directory.GetDirectories(DossierSource)) 'option 1 on liste les répertoires (ce qui correspond exactement à la demande)
            File.WriteAllLines("C:\temp\ListeDesFichiers.Txt", Directory.GetFiles(DossierSource)) 'option 2 on liste les fichiers
            File.WriteAllLines("C:\temp\ListeDeTous.Txt", Directory.GetFiles(DossierSource).Concat(Directory.GetDirectories(DossierSource))) 'option 3 on liste les fichiers et les dossiers (ce qui est sans doute plus proche du besoin au final)
        End Sub
0
cs_JMO
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26 > Whismeril
Messages postés
17345
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
26 mai 2022

30 sept. 2017 à 08:53
Bonjour Whismeril,

Effectivement, ton code est plus simple !!!
L'énoncé d'AReS097 est ambigu. D'après moi, il souhaite aussi énumérer les sous-répertoires.

Bonne journée,
jean-marc
0
Whismeril
Messages postés
17345
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
26 mai 2022
596 > cs_JMO
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018

Modifié le 1 oct. 2017 à 08:45
Salut Jean Marc.
La classe File permet les manipulations de base sur les fichiers:
  • lire
  • ecrire
  • ajout
  • renommage
  • déplacement
  • etc

A chaque action, elle ouvre le fichier, fait ce qu’on lui demande et libère le fichier.

La méthode WriteAllLines écrit le contenu d’une collection (tableau si framework un peu vieille) oú chaque item sera une ligne. Si le fichier de destination existe, il sera écrasé.

L’utilisation d’un stream interviendra dans des cas plus complexes, pour les fichiers trop volumineux pour être ouverts d’un coup ou quand on veut garder le fichier ouvert (pour ne pas ouvrir d’accès concurrent).
0
Au pire, tu utilises l'appel de fonction sous DOS:

dir *. /B>dir.txt
-1
Whismeril
Messages postés
17345
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
26 mai 2022
596
29 sept. 2017 à 13:51
La question est posée en VB.Net, s’il avait voulu du dos, il l’aurait dit....
0
JeuDuTaquin > Whismeril
Messages postés
17345
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
26 mai 2022

Modifié le 30 sept. 2017 à 03:09
Donc, en VB6...

Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Dim SourceDir As String, DestDir
SourceDir = "C:\"
DestDir = "C:\"
ShellExecute 0, "open", SourceDir & "dir *. /B>" & DestDir & "dir.txt", vbNullString, vbNullString, 0

En théorie, ce code fonctionne, mais en pratique, les barrières sécuritaires interdisent l'écriture du fichier dans le répertoire cible.
Un appel de fichier batch serai peut-être pris en compte, mais en l'état, ce code est rejeté par le système, qui considère cet appel comme une aberration sécuritaire, donc ignorée.
Le codage pur VB est donc préférable.
0
vb95
Messages postés
2634
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
27 mai 2022
151 > JeuDuTaquin
Modifié le 30 sept. 2017 à 03:03
bonsoir
La question a été posée en VB NET ?
Et en plus du VB6 avec ShellExecute ce n'est plus beaucoup du VB 6 mais de VB 6 Apisé ( avec les Apis Windows )
0
JeuDuTaquin > vb95
Messages postés
2634
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
27 mai 2022

30 sept. 2017 à 03:27
Salut vb95,

Comme toujours, demande et question imprécise non suivie...
Titillent l'imaginaire et les réponses partent dans toutes les directions.

Vb.net sûrement, Vb6 peut-être et VB5 pas sûr.

Mais, d'office, il faut se baser sur la branche du forum qui est VB.NET.
Donc, tout autre langage (y compris VB6/batch DOS) sont à exclure.

Vu la généralité de la question, les visiteurs trouveront la ou une réponse à leur recherche!

Donc, il n'est pas inutile de "perdre son temps" à des réponse aussi générales que la question.

Merci pour ton dévouement passionné pour ce forum.
0
Whismeril
Messages postés
17345
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
26 mai 2022
596 > JeuDuTaquin
30 sept. 2017 à 08:20
Bonjour.

Comme toujours, demande et question imprécise non suivie...
Titillent l'imaginaire et les réponses partent dans toutes les directions.

Vb.net sûrement, Vb6 peut-être et VB5 pas sûr.

La question n'est pas suivie OK, mais pour le reste je ne suis pas d'accord.
D'abord, elle est très précise.
Ensuite, il est impossible de poster dans le forum général VB.
Donc il a choisi VB.Net -> on répond en VB.Net ou alors ça devient le bazar (ça l'est d'ailleurs).
Nous aurions pu carrément supprimer les réponses de DirSousDos et LaluneBe car hors sujet, mais on les a laissées en leur disant que ça n'est pas ce qui est demandé pour que la prochaine fois ils ne répondent pas n'importe quoi.
Et toi, tu rajoutes une couche au désordre...
Après s'il se rend compte que le code ne compile pas parce qu'il s'est trompé de langage, il le dit, on déplace la discussion dans le bon forum.
0
LaluneBe
Messages postés
7
Date d'inscription
vendredi 29 septembre 2017
Statut
Membre
Dernière intervention
11 octobre 2017

29 sept. 2017 à 13:22
Bjr suivre cette code
'Code pour afficher des répertoire dans un liste
List1.Clear
xrep = Dir(Text1.Text + "\*.", vbDirectory)
'Text1.text repertoire source
Do While xrep <> ""
If xrep <> "." And xrep <> ".." Then
List1.AddItem xrep
End If
xrep = Dir
Loop

'-----------------------------
Code pour mettre les listes dans un fichier
dim i as Integer
dim xlist as string
for i =0 to Form1.List1.ListCount - 1
xlist = form1.list1.list(i)
Form1.List1.Selected(i) = True
open "c:\temp\" & "fichier" & ".txt" for append as #1
Print #1, xlist
close #1
next i

Merci
-1
Whismeril
Messages postés
17345
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
26 mai 2022
596
29 sept. 2017 à 13:51
Idem, il n’a pas demandé du VB6......
0
vb95
Messages postés
2634
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
27 mai 2022
151 > Whismeril
Messages postés
17345
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
26 mai 2022

Modifié le 29 sept. 2017 à 18:11
bonjour LalunuBe
En plus ton code VB6 n'est valable qu'avec des partitions Fat 16 et Fat 32 ( inutile de mentionner la Fat 12 ) .
En NTFS il fonctionnera aussi mais inutile alors de tester les répertoires "." et ".." .
Le framework Net offre une classe toute faite ( Directory) : autant s'en servir !
0