Liste le contenu d'un repertoire dans un fichier texte

Messages postés
22
Date d'inscription
mercredi 11 mars 2009
Dernière intervention
28 septembre 2017
- - Dernière réponse : vb95
Messages postés
1733
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
17 décembre 2018
- 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
--
Afficher la suite 

Votre réponse

4 réponses

Messages postés
1733
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
17 décembre 2018
Commenter la réponse de vb95
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
0
Merci
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
cs_JMO
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
> Whismeril
Messages postés
12414
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 décembre 2018
-
Pour moi, cela provoque l'erreur

Une exception non gérée du type 'System.UnauthorizedAccessException' s'est produite dans mscorlib.dll

Informations supplémentaires : L'accès au chemin d'accès 'C:\Users\monmatricule\Documents\Ma musique' est refusé.

Ce n'est pas grave, grâce à toi et vb95, j'aurai appris de nouvelles méthodes.

A AReS097 de tester et de choisir "sa" méthode !!!

Bonne soirée et à +,
jean-marc
Whismeril
Messages postés
12414
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 décembre 2018
> cs_JMO
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
-
Y'a un truc particulier avec ce dossier chez toi (moi j'ai rien dedans....)?
Tu l'as mis en lecture seule?
cs_JMO
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
> Whismeril
Messages postés
12414
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 décembre 2018
-
Je l'ai même supprimé, mais le message d'erreur reste.
Idem pour "Mes Images", "Mes videos".
Mon poste est un W7 Webtop mastérisé par mon entreprise.
Je dois utiliser un VPN et donc quand je liste le répertoire "Documents", je liste aussi les répertoires réseaux dont j'ai l'accès.
Je ne suis pas administrateur de mon poste.
Mon "cas" est donc spécial !!!
Whismeril
Messages postés
12414
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 décembre 2018
> cs_JMO
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
-
Ha oui
vb95
Messages postés
1733
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
17 décembre 2018
> cs_JMO
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
-
bonsoir cs_JMO
Merci de me citer
Mais Whis étant plus calé que moi je l'ai laissé seul sur cette discussion
bonsoir à lui aussi
Commenter la réponse de cs_JMO
-1
Merci
Au pire, tu utilises l'appel de fonction sous DOS:

dir *. /B>dir.txt
Whismeril
Messages postés
12414
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 décembre 2018
-
La question est posée en VB.Net, s’il avait voulu du dos, il l’aurait dit....
> Whismeril
Messages postés
12414
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 décembre 2018
-
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.
vb95
Messages postés
1733
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
17 décembre 2018
> JeuDuTaquin -
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 )
> vb95
Messages postés
1733
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
17 décembre 2018
-
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.
Whismeril
Messages postés
12414
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 décembre 2018
> JeuDuTaquin -
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.
Commenter la réponse de DirSousDos
Messages postés
7
Date d'inscription
vendredi 29 septembre 2017
Dernière intervention
11 octobre 2017
-1
Merci
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
Whismeril
Messages postés
12414
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 décembre 2018
-
Idem, il n’a pas demandé du VB6......
vb95
Messages postés
1733
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
17 décembre 2018
> Whismeril
Messages postés
12414
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 décembre 2018
-
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 !
Commenter la réponse de LaluneBe

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.