Filer i Array

Tags:    visual-basic

Hejsa. Kan nogen give mig et simpelt eksempel på hvordan man kan få ALLE filer fra en given mappe ind i et array?

På forhånd tak.



5 svar postet i denne tråd vises herunder
4 indlæg har modtaget i alt 6 karma
Sorter efter stemmer Sorter efter dato
Hejsa. Kan nogen give mig et simpelt eksempel på hvordan man kan få ALLE filer fra en given mappe ind i et array?

På forhånd tak.


Du skal allerførst gå op i
Project>References

her skal du så vælge

Microsoft Scripting Runtime

og så skrive du flg. kode
<pre>
Ztel=0
path="C:\\windows" 'her ændre du stien
Set fso = New FileSystemObject
Set objFiles = fso.GetFolder(Path).Files
For Each objFile In objFiles
ztel=ztel+1
filez(ztel)=objFile.Name
Next
</pre>

Håber du kan bruge det til noget.

mvh.
Thomas Christensen
-------------------------------------------------------
Visual Basic noget for dig?
tjek Visual Basic-Gruppen
http://www.udvikleren.dk/groups/?gid=41



-----------------------------------------------------------------------------
Det jeg skal bruge er et unikt nummer til hver filnavn, derfor tænkte jeg at et array måske kunne bruges.

Hvis nogen har et andet forslag skal de være velkomne til at poste der her.

Mvh. Steffen Nielsen
-----------------------------------------------------------------------------

Hej Steffen

Der er altid mere end en metode (næsten altid). Jeg har skrevet et lille program til dig. Lav en form og smid en kommandoknap på formen. Smid så koden nedenfor ind. Det hele er dokumenteret med kommentarer, så det skulle være til at forstå.

Der er en rutine ved navn HentAlleFiler. Den henter alle filer fra den angivne mappe og returnerer et array. Se Command1_Click rutinen for oplysninger om, hvordan rutinen bruges.

Jeg bruger kun VB kode ... ikke noget API og ikke noget med FileSystemObject eller andet hokus-pokus. Jeg tror ikke, det kan gøres meget simplere.

Håber du kan bruge det.
Herluf

<pre>
Option Explicit

Private Sub Command1_Click()

'
' Deklarer et dynamisk array til brug med
' HentAlleFiler rutinen.
'
Dim arrFiler() As String

'
' Kald rutinen uden en mappe (Windows
' mappen er default).
'
HentAlleFiler arrFiler()

'
' Udskriv lige filerne til Immediate-
' vinduet, så vi kan se, at det rent
' faktisk virker.
'
Dim lngLimit As Long
Dim lngIndex As Long

Let lngLimit = UBound(arrFiler())
For lngIndex = 1 To lngLimit
Debug.Print "Fil nr. " & lngIndex & _
" hedder '" & arrFiler(lngIndex) & _
"'"
Next

'
' Vi prøver at søge på diskens rod.
'
HentAlleFiler arrFiler(), "c:\\"

'
' Udskriv lige filerne igen.
'
Let lngLimit = UBound(arrFiler())
For lngIndex = 1 To lngLimit
Debug.Print "Fil nr. " & lngIndex & _
" hedder '" & arrFiler(lngIndex) & _
"'"
Next

End Sub



'
' Henter alle filer fra "C:\\Windows" (eller
' den mappe, du angiver) og smider dem ind i
' det array, der sendes til rutinen (dvs.
' argArray() argumentet).
'
Public Sub HentAlleFiler( _
ByRef argArray() As String, _
Optional ByVal argSearchMask As String = "c:\\windows" _
)

'
' Vi skal lige have nogle lokale
' variabler.
'
Dim curFile As String ' den fundne fil
Dim strMask As String ' søgemaske
Dim lngLimit As Long ' grænse på array

'
' Opbyg søgemasken, så den ser ud som
' f.eks. "C:\\Windows\\*.*", når vi
' begynder søgningen.
'
Let strMask = Trim$(argSearchMask)

If Right$(strMask, 1) <> "\\" Then _
Let strMask = strMask & "\\"

Let strMask = strMask & "*.*"

'
' Vi sætter den øvre grænse på array'et
' og søger på den første fil. Vi angiver
' søgemaske og de attributter, vi ønsker
' at finde. I vores tilfælde vil vi have
' alle filer men ikke mapper.
'
Let lngLimit = 0
Let curFile = Dir$(strMask, _
vbSystem Or _
vbArchive Or _
vbHidden Or _
vbReadOnly)

'
' Vi bliver nødt til at redimensionere
' array'et, før det kan bruges. Vi bruger
' IKKE Preserve her, for vi vil gerne
' slette eventuelle data fra tidligere
' kald.
'
ReDim argArray(0 To 0)

'
' Nu kører bussen simpelthen, indtil der
' ikke er flere filer i mappen. Når der
' ikke er flere filer, returnerer DIR-
' kommandoen nemlig "" (en tom streng).
'
Do While curFile <> ""
'
' REDIM PRESERVE øger størrelsen på
' det dynamiske array uden at slette
' eksisterende data.
'
ReDim Preserve argArray(0 To lngLimit)

'
' Sæt det aktuelle element til den
' fil, der blev fundet. Array'et
' starter med index 0.
'
Let argArray(lngLimit) = curFile

'
' Siden øger vi indekset og leder
' efter næste filnavn. Når næste fil
' skal findes, angives ingen parametre
' i kaldet til DIR funktionen.
'
Let lngLimit = lngLimit + 1
Let curFile = Dir$()
Loop

End Sub
</pre>

Software is here and now but rock and roll is forever.

[Redigeret d. 01/04-04 07:55:14 af Herluf Hermansen]



Hejsa. Kan nogen give mig et simpelt eksempel på hvordan man kan få ALLE filer fra en given mappe ind i et array?

På forhånd tak.


Du kan gøre sådan her:

<pre>
var
SearchRec : TSearchRec;
Path: String;
Filer: Array[0..99] of string;
Count: Integer;
begin
Path := 'C:\\';
Count := 1;
if FindFirst(Path+'*.*', faAnyFile - faDirectory, SearchRec) = 0 then
begin
repeat
Filer[Count] := SearchRec.Name;
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
end;
</pre>

- SpeC - #SpeC.DK @ Q-NET



Hejsa. Kan nogen give mig et simpelt eksempel på hvordan man kan få ALLE filer fra en given mappe ind i et array?

På forhånd tak.


Hvis du i forvejen kender mappen (en given mappe ind i et array) kan du gøre som Thomas skrev. Og I Thomases eksempel kunne man evt bruge det oprettede arrays Index som det unikke tal for de enkelte filer i den angivne mappe.

Hvis du dog havde tænkt dig at løbe alle maperne igennem for at alle filer et unikt tal kunne du evt. oprette en overordnet værdi der hele tiden blev forhøjet med 1 hver gang en ny fil blev tilføjet.
Fold kodeboks ind/udKode 


Koden virker dog ikke...

Nu kender jeg ikke formålet, men hvis du selv vil kunne forstå systemet i dine tal kunne det måske være smartere at den ved den første mappe satte et 1-tal og ved den næste et 2-tal således at "1424" måske er tallet på fil nr. 4 der ligger i den anden mappe i den fjerde mappe i den første mappe på drevet. Dette er alfabetisk sorteret...

// Great programs often follow great brains!



Hejsa. Kan nogen give mig et simpelt eksempel på hvordan man kan få ALLE filer fra en given mappe ind i et array?

På forhånd tak.

Du skal allerførst gå op i
Project>References

her skal du så vælge

Microsoft Scripting Runtime

og så skrive du flg. kode
<pre>
Ztel=0
path="C:\\windows" 'her ændre du stien
Set fso = New FileSystemObject
Set objFiles = fso.GetFolder(Path).Files
For Each objFile In objFiles
ztel=ztel+1
filez(ztel)=objFile.Name
Next
</pre>

Håber du kan bruge det til noget.

mvh.
Thomas Christensen
-------------------------------------------------------
Visual Basic noget for dig?
tjek Visual Basic-Gruppen
http://www.udvikleren.dk/groups/?gid=41





Det hjalp mig lidt, men jeg syntes ik lige jeg ku få filnavnene smidt ind i et array. Men måske er der også en anden metode. Det jeg skal bruge er et unikt nummer til hver filnavn, derfor tænkte jeg at et array måske kunne bruges.

Hvis nogen har et andet forslag skal de være velkomne til at poste der her.

Mvh. Steffen Nielsen



t