Liste le contenu d'un repertoire dans un fichier texte

AReS097 22 Messages postés mercredi 11 mars 2009Date d'inscription 28 septembre 2017 Dernière intervention - 28 sept. 2017 à 13:52 - Dernière réponse : vb95 1384 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 9 décembre 2017 Dernière intervention
- 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 
22Messages postés mercredi 11 mars 2009Date d'inscription 28 septembre 2017 Dernière intervention

28 réponses

Répondre au sujet
vb95 1384 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 9 décembre 2017 Dernière intervention - 28 sept. 2017 à 14:46
Commenter la réponse de vb95
cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention - Modifié par cs_JMO le 30/09/2017 à 01:49
0
Utile
17
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 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention > Whismeril 10512 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 1 oct. 2017 à 20:22
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 10512 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention > cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention - 1 oct. 2017 à 20:28
Y'a un truc particulier avec ce dossier chez toi (moi j'ai rien dedans....)?
Tu l'as mis en lecture seule?
cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention > Whismeril 10512 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 1 oct. 2017 à 20:38
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 10512 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention > cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention - 1 oct. 2017 à 20:46
Ha oui
vb95 1384 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 9 décembre 2017 Dernière intervention > cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention - 1 oct. 2017 à 23:31
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
DirSousDos - 29 sept. 2017 à 10:23
-1
Utile
5
Au pire, tu utilises l'appel de fonction sous DOS:

dir *. /B>dir.txt
Whismeril 10512 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 29 sept. 2017 à 13:51
La question est posée en VB.Net, s’il avait voulu du dos, il l’aurait dit....
JeuDuTaquin > Whismeril 10512 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 30 sept. 2017 à 02:29
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 1384 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 9 décembre 2017 Dernière intervention > JeuDuTaquin - 30 sept. 2017 à 03:01
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 )
JeuDuTaquin > vb95 1384 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 9 décembre 2017 Dernière intervention - 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.
Whismeril 10512 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention > 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.
Commenter la réponse de DirSousDos
LaluneBe 7 Messages postés vendredi 29 septembre 2017Date d'inscription 11 octobre 2017 Dernière intervention - 29 sept. 2017 à 13:22
-1
Utile
2
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 10512 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 29 sept. 2017 à 13:51
Idem, il n’a pas demandé du VB6......
vb95 1384 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 9 décembre 2017 Dernière intervention > Whismeril 10512 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 29 sept. 2017 à 18:05
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.