Bestanden en mappen bepalen

Status
Niet open voor verdere reacties.

ThecodeMaster

Gebruiker
Lid geworden
23 jun 2009
Berichten
56
Probleemstelling:
Er zijn bestanden gekopieerd, echter tijdens het kopieeren zijn er extra gegevens toegevoegd aan de naam.
bv bestand.pdf is georden bestand_pdf.pdf
Dit is niet concequent gedaan, dus wil ik een VB programma schrijven die kijken of er aan deze voorwaarde voldaan wordt en vervolgens de naam aanpast.

Nu wil ik in een listbox alle namen inclusief mapnaam weergeven om zo per regel de bestanden langs te lopen.

Vraag:
Hoe moet ik een listbox vullen met mappen/submappen/bestandnamen.

Werner
 
Hier is een code, ik hoop dat het je verder helpt, of dat je dit bedoelt:

Code:
For each files in my.computer.filesystem.getfiles("Patnaam hier")
       listbox1.items.add(files)
next

For each dir in my.computer.filesystem.getdirectorys("Patnaam hier")
       listbox1.items.add(dir)
next
 
Sander,

For each dir in my.computer.filesystem.getdirectorys("Patnaam hier")
listbox1.items.add(dir)
next

Het eerste deel werkt, maar bij het deel hierboven geeft VB in de debuger een fout aan.
Error 3 Expression is a value and therefore cannot be the target of an assignment. C:\.....\visual studio 2010\Projects\......\Hoofd.vb

De waarde dir schijnt niet goed te zijn. Computer loopt dan vast en moet hem via de taakbalk verlossen uit zijn lijden.

Werner
 
Het is dan ook:

[cpp] Dim directory As String = "Pad"
For Each file As String In System.IO.Directory.GetFiles(directory)
ListBox1.Items.Add(System.IO.Path.GetFileName(file))
Next

For Each folder As String In System.IO.Directory.GetDirectories(directory)
ListBox1.Items.Add("\" & System.IO.Path.GetFileName(folder))
Next[/cpp]
 
De bovenstaande code werkt wel, maar geeft alleen de root directory

Onderstaande code heb ik vanaf MSDN
http://msdn.microsoft.com/en-us/library/ms128229.aspx#Y0
Code:
        Dim foundDirectory As String
        For Each foundDirectory In My.Computer.FileSystem.GetDirectories("C:\", FileIO.SearchOption.SearchAllSubDirectories, "*.*")
            ListBox1.Items.Add(foundDirectory)
        Next
Maar hier loopt de computer op vast.
Ik snap er niets van.
In sommige gevallen kreeg ik de volgende melding:
"a first chance exception of type 'system.unauthorizedaccessexception' occurred in mscorlib.dll"
Maar dat heeft ook niets opgeleverd op het internet qua oplossing. Het is wel een fout die kennelijk vaker voorkomt.

Dus, helaas nog niet opgelost. :confused:

Eigenlijk moet ik het commando C:\TREE /F maar geven in het command blok en via een omweg de gegevens naar boven krijgen.
Werner
 
OK, je wilt de naam van alle mappen en bestanden van een opgegeven directory in een listbox.
Hoe wil je dat alles erin komt te staan?

Want voor zover ik heb getest, doet mijn code zijn werk ;)
 
@JoZ1,

Niet alleen het opgegeven pad, maar ook alle daaronder liggende submappen met bestanden.
Daar zit nu net het probleem.

Werner
 
Stel ik heb een map: C:\Users\test\Map

In die map staan de files:

  • C:\Users\test\Map\test.txt
  • C:\Users\test\Map\test.doc

En de mappen:

  • C:\Users\test\Map\Map1
  • C:\Users\test\Map\Map2

Als ik dan dit invul: C:\Users\test\Map

Komt er dit uit:

Code:
test.txt
test.doc
\Map1
\Map2

Wat wil je daar anders aan hebben?
 
Ik had een output in gedachten zoals hieronder.
Code:
BESTAND1.TXT
BESTAND1.TXT
C:\MAP\FILE1.DATA
C:\MAP\FILE2.DATA
C:\MAP\SUBMAP\DOC.DOCX
C:\MAP\SUBMAP\XLSFILE.XLSX
Dat krijg ik dus niet voor elkaar en word er :evil: van.
Ik heb voor moeilijkere vraagstukken gestaan, maar dit grrrrrrrrrrrrrrr.

Werner
 
Dus...

  • Je wilt alle bestanden in die map weergeven als bijv.: Test.txt ?
  • Je wilt alle mappen in die map weergeven als bijv.: C:\MAP\MAP ?
  • Je wilt alle bestanden in de subdirectories weergeven als bijv.: C:\MAP\MAP\Test.txt ?

Geef a.u.b. duidelijk antwoord want ik begrijp je nu niet meer :P
 
JoZ1,

Nog één maal:d

Alle bestanden in alle mappen inclusief de root-directory
Code:
C:\BESTAND1.TXT
C:\BESTAND1.TXT
C:\MAP\FILE1.DATA
C:\MAP\FILE2.DATA
C:\MAP\SUBMAP\DOC.DOCX
C:\MAP\SUBMAP\XLSFILE.XLSX
C:\MAP2\BLABLA.BAT
C:\MAP2\MAP2A\BLABLA2.XLS
Hopelijk is het nu duidelijk.

Werner
 
De bovenstaande code werkt wel, maar geeft alleen de root directory

Onderstaande code heb ik vanaf MSDN
http://msdn.microsoft.com/en-us/library/ms128229.aspx#Y0
Code:
        Dim foundDirectory As String
        For Each foundDirectory In My.Computer.FileSystem.GetDirectories("C:\", FileIO.SearchOption.SearchAllSubDirectories, "*.*")
            ListBox1.Items.Add(foundDirectory)
        Next
Maar hier loopt de computer op vast.
Ik snap er niets van.
In sommige gevallen kreeg ik de volgende melding:
"a first chance exception of type 'system.unauthorizedaccessexception' occurred in mscorlib.dll"
Maar dat heeft ook niets opgeleverd op het internet qua oplossing. Het is wel een fout die kennelijk vaker voorkomt.

Dus, helaas nog niet opgelost. :confused:

Eigenlijk moet ik het commando C:\TREE /F maar geven in het command blok en via een omweg de gegevens naar boven krijgen.
Werner

Die error komt omdat je niet genoeg rechten hebt om in sommige mappen te kijken, verander
Code:
My.Computer.FileSystem.GetDirectories("C:\", FileIO.SearchOption.SearchAllSubDirectories, "*.*")
eens in
Code:
My.Computer.FileSystem.GetDirectories("C:\users\*gebruikersnaam*", FileIO.SearchOption.SearchAllSubDirectories, "*.*")

Als het goed is, zou het dan wel moeten werken. Als de bestandjes/mappen van je programma wel bij "C:\" staan, dan zou je kunnen proberen om een paar van die for each lussen te gebruiken voor alleen die mappen, en dan ook nog een keer gewoon bij "C:\" maar dan zonder alle subdirectories.

Succes!:thumb:

*EDIT*

Hmm, dit werkte nu bij mij ook niet.....

Probeer anders dit eens: http://www.helpmij.nl/forum/showthread.php/636411-Bestand-openen-met-administrator-rechten#post_4054663
 
Laatst bewerkt:
Voìla:

[CPP] Dim directory As String = "Pad"
For Each file As String In System.IO.Directory.GetFiles(directory)
ListBox1.Items.Add(file)
Next
For Each folder As String In System.IO.Directory.GetDirectories(directory)
For Each file In System.IO.Directory.GetFiles(folder)
ListBox1.Items.Add(file)
Next
Next[/CPP]

Getest, en werkt perfect :D
 
Laatst bewerkt:
JoZ1,

Ik ben jaloers op je.
Ik snap niet waarom het bij mij niet werkt.
Zie de code onder. Deze verschilt niet met die van jou, allee het padnaam is aangepast.
Code:
Public Class Hoofd

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        Dim directory As String = "D:\Projecten\"
        For Each file As String In System.IO.Directory.GetFiles(directory)
            ListBox1.Items.Add(file)
            'Console.WriteLine(file)
        Next
        For Each folder As String In System.IO.Directory.GetDirectories(directory)
            For Each file In System.IO.Directory.GetFiles(folder)
                ListBox1.Items.Add(file)
            Next
        Next

    End Sub

End Class

Moeten er nog andere dingen geladen worden, nee toch.
De directory D:\PROJECTEN\ is voor iedereen toegankelijk.

Werner
 
Zegt-ie soms dat-ie geen toegang heeft? Of wordt er gewoon niets geladen?
 
Er zijn bepaalde folders waar je normaal gesproken geen toegang tot hebt. Deze folders zijn dan ook verborgen, maar VB weet ze toch te vinden wanneer je bovenstaande code uitvoert. Je zult een error krijgen wanneer die code één van die folders tegenkomt.
Je zult dus een If statement of iets dergelijks moeten inbouwen dat controleert of de huidige folder een verborgen folder is waar je geen toegang tot hebt. Dan kan je vervolgens deze folder overslaan.

Volgens mij was er onlangs een thread met hetzeflde probleem, ik weet alleen niet of daar ook de oplossing werd gevonden.
 
Ik weet zeker dat er geen verborgen folders in deze map/submap zit.
De kenmerken van de bestanden heb ik ook op lezen-schrijven staan.
Wat dat betreft moet dat geen probleem zijn.

M.bt. het verloop van het programma.
Ik heb er nu een MSGBOX aan toegevoegd, deze komt in beeld wanneer hij klaar is.
Hij loopt er supersnel doorheen, maar geen output richting de listbox.?

Laat één bestand zien dat in de hoofd directory D:\Projecten\ staat, verder niets.

Erg raar.

Werner
 
Geprobeerd en hier werkt het.

C of D maakt niet uit , zoals The Mighty Atom zei bij bepaalde mappen krijg je een error .

Er zit dus geen fout in de code.

Maar ik zie iets wat niet goed is bij wat je gepost hebt.

Code:
[B] '[/B]Console.WriteLine(file)

haal het teken eens weg voor Console bij jou geplaatste code.


Code:
 het \  teken  achter Pad

heb ik ook niet staan
 
Laatst bewerkt:
@Schipperjte: Dat met het aanhalingsteken ervoor is een comment. En het maakt niet uit of er een \ achter het pad staat. :)

@ThecodeMaster: Probeer het eens bij een andere map.
 
Verborgen folders waar je geen toegang tot hebt die op elke schijf/partitie voorkomen zijn de $recycle folder en de System Volume Information folder.
Die zul je dus moeten overslaan.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan