Springen naar inhoud


- - - - -
VS 2015

Directory.getfiles(Path, Searchmask) Issue

VS2015

  • Log in a.u.b. om te beantwoorden
Er zijn 6 reacties in dit onderwerp

#1 BartBu

BartBu

    Starting Developer

  • Leden
  • 4 berichten
    Laatst bezocht gisteren, 10:12
  • LocatieBrussel

Geplaatst op 22 juni 2018 - 15:18

Ik heb een issue met deze searchmask

for each file as string in io.directory.getfiles("c:\temp", "lol.ok*.dmp")
do stuff
next

mask = lol.ok*.dmp
vindt geen enkele file

terwijl ik in windows explorer wel files vind met dezelfde mask

is de issue dat er meerdere punten in de file naam staan?

is er mischien een betere manier om files te zoeken in een directory?

ik probeer een tool te maken dat door duizende folders gaat om log of dump files te zoeken en op te halen

#2 Hansiebebe

Hansiebebe

    Professional Developer

  • Leden
  • PipPipPipPip
  • 328 berichten
    Laatst bezocht 25 nov 2018 22:17

Geplaatst op 22 juni 2018 - 17:26

Hallo BartBu

Ik heb dat issue ook ooit gehad.
Ik was dan op zoek naar oude bestanden, volgens mij met zoiets opgelost.


Code:
Dim directory As New IO.DirectoryInfo("c:\JouPath")
For Each file As IO.FileInfo In directory.GetFiles
 
If file.Name.Contains("Zoek tekst") Then

' je actie
next



#3 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1092 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 23 juni 2018 - 09:43

Bericht bekijkenBartBu, op 22 juni 2018 - 15:18, zei:

Ik heb een issue met deze searchmask

mask = lol.ok*.dmp
vindt geen enkele file

terwijl ik in windows explorer wel files vind met dezelfde mask
is de issue dat er meerdere punten in de file naam staan?

Niet mis met het mask.
Dat zou gewoon moeten werken.
Visual Basic Code:
 Const mask As String = "03.0*.mp4"
Directory.GetFiles(pad, mask).
ToList.
ForEach(Sub(f) Debug.WriteLine(f))

output:
Code:
C:\Users\Hannibal\Videos\Angular\03.01 Introduction to Components.mp4
C:\Users\Hannibal\Videos\Angular\03.02 What is a Component.mp4
C:\Users\Hannibal\Videos\Angular\03.03 Creating the Component Class.mp4
C:\Users\Hannibal\Videos\Angular\03.04 Defining the Metadata with Decorator.mp4
C:\Users\Hannibal\Videos\Angular\03.05 Importing what we need.mp4
C:\Users\Hannibal\Videos\Angular\03.06 Demo Creating the App Component.mp4
C:\Users\Hannibal\Videos\Angular\03.07 Bootstrapping the App Component.mp4
C:\Users\Hannibal\Videos\Angular\03.08 Demo Bootstrapping the App Component.mp4
C:\Users\Hannibal\Videos\Angular\03.09 Component Checklist and Summary.mp4



Bericht bekijkenBartBu, op 22 juni 2018 - 15:18, zei:

is er mischien een betere manier om files te zoeken in een directory?
ik probeer een tool te maken dat door duizende folders gaat om log of dump files te zoeken en op te halen
Gebruik Directory.EnumerateFiles, dat zal de resultaten yielden terwijl ze gevonden worden i.p.v. ze als een array terug te geven.
Noteer dat beiden een fout geven als je niet voldoende rechten hebt op een folder.

Hier geen .ToList gebruiken, want dan worden ook eerst alle files verzameld.
Gebruik alleen maar Linq expressies met deferred execution
Visual Basic Code:
 
Const mask As String = "*.mp4"
Const pad As string = "C:\Users\Hannibal\Videos"
For Each file As String In Directory.EnumerateFiles(pad,mask,SearchOption.AllDirectories)
	Debug.WriteLine(file)
Next


Ook: als je een UI hebt: gebruik dan threading voor de verwerking.
Maak dan wel niet de fout om te synchroniseren bij elk bestand (want dan heb je eigenlijk enkel de nadelen van threading).

#4 BartBu

BartBu

    Starting Developer

  • Leden
  • 4 berichten
    Laatst bezocht gisteren, 10:12
  • LocatieBrussel

Geplaatst op 25 juni 2018 - 09:33

bedankt ik zal het eens anders proberen, ik post nog wel hoe/wat

de mask is ook geen constante, eerder iets wat je meegeeft als je op zoeken klikt, misschien toch regex gebruiken

#5 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1092 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 26 juni 2018 - 11:27

View PostBartBu, on 25 juni 2018 - 09:33, said:

bedankt ik zal het eens anders proberen, ik post nog wel hoe/wat
Zoals ik al zei: het ligt niet aan het mask.
Je zoekt toch niet toevallig in de windows\system32 folder, of misschien een shared folder?

View PostBartBu, on 25 juni 2018 - 09:33, said:

de mask is ook geen constante
Dat maakt niet uit.

View PostBartBu, on 25 juni 2018 - 09:33, said:

misschien toch regex gebruiken
Euh?

#6 BartBu

BartBu

    Starting Developer

  • Leden
  • 4 berichten
    Laatst bezocht gisteren, 10:12
  • LocatieBrussel

Geplaatst op 26 juni 2018 - 11:31

nu lijkt het wel te werken, zonder aanpassing
heel vreem maar super lol

de bedoeling is het volgende

in 1000den folders vol met 100den verschillende log files en dmp's van virtuele machines
log files op te halen (die al dan niet een bepaalde string in de tekst bevatten)
aantal keren de string voorkomt bij te houden en de logs/dmp te kopieren naar een results folder

dit om gemakkelijk bepaalde fouten te vinden en hoeveel keer ze voorkomen

variables :
- log file name
- al dan niet string in de tekst zoeken
- datum selectie of alle data

allen bedankt

#7 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1092 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 27 juni 2018 - 23:53

EnumerateFiles is je vriend. Zeker voor grote hoeveelheden mappen/bestanden.
Als je FileInfo wil: DirectoryInfo.EnumerateFiles eventueel met Linq Where clause
Enkel pad/naam: Directory.EnumerateFiles eventtueel met Linq Where clause

Wel testen of je rechten hebt op de folder.





Ook met taq VS 2015, VS2015 voorzien

0 gebruiker(s) lezen dit onderwerp

0 lid(leden), 0 bezoeker(s), 0 anonieme gebruikers

Inloggen


[VS 2015] Untitled 1

Met dank aan J├╝rgen voor de jarenlange inzet van visualbasic.be (anno dec 2000)
Met dank aan Mike en Ronneke voor de jarenlange inzet van vbib.be (anno dec 2010)
Met dank aan PascalBianca voor de jarenlange inzet van vbib.be (anno dec 2016)