14. marts 2003 - 11:33Der er
12 kommentarer og 1 løsning
Tilføje filer med bestemt extension til listbox
Hej alle eksperter... Jeg har et lille problem og kunne godt tænke mig at få et par svar på det. Jeg er igang med et client/server program i delphi (naturligtvis) og mangler at kunne få tilføjet bestemte filer fra en mappe, med en bestemt extension til en listbox. Samtidigt skal dele af filerne blive lagret i en 2-dimensionel array...(dvs. en fil skal blive splittet op og indsat i [1,x] osv.)
Det som denne del af mit program skal kunne gøre, er at tjecke om en fil har den bestemte extension. Hvis filen har det skal programmet tilføje filen i en listbox, åbne den, og (ligesom med en ini-fil) læse det der står imellem ] og [ og tilføje det til en array med hvert sit index. Btw. forstår ikke dit første svar =)
if FindFirst(IncludeTrailingPathDelimiter('C:\mydir\*.mp3'),faANYFILE,S) = 0 then repeat if ( S.Attr and faSysFile = 0 ) and ( S.Attr and faDIRECTORY = 0 ) and ( S.Attr and faVolumeID = 0 ) and ( S.Name <> '.' ) and ( S.Name <> '..' ) then begin // her får du alle filer der har mp3 som endelse // i S.FindData.cFileName end; until FindNext(S) <> 0; FindClose(S);
øhh når du siger at "det er muligt du ikke skal bruge IncludeTrailingPathDelimiter()" mener du så at der ikke skal stå nogen path, eller er det kun "IncludeTrailingPathDelimiter" der skal væk? (ps. det virker ikke pga. den).
Lige nu har jeg forkortet den første linje ned til: if FindFirst('*.mcf',faANYFILE,S) = 0 then Men den siger nu at "Types of actual and formal var parameters must be identical" ???
I en case of en integer ser lige den del som skal søge således ud:
10:begin if FindFirst('*.mcf',faANYFILE,S) = 0 then repeat if ( S.Attr and faSysFile = 0 ) and ( S.Attr and faDIRECTORY = 0 ) and ( S.Attr and faVolumeID = 0 ) and ( S.Name <> '.' ) and ( S.Name <> '..' ) then begin // her får du alle filer der har mp3 som endelse // i S.FindData.cFileName end; until FindNext(S) <> 0; FindClose(S); end;
procedure FindAll (const Path: String; Attr: Integer; List: TStrings); var Res: TSearchRec; EOFound: Boolean; begin EOFound:= False; if FindFirst(Path, Attr, Res) < 0 then exit else while not EOFound do begin List.Add(Res.Name); EOFound:= FindNext(Res) <> 0; end; FindClose(Res); end;
procedure TForm1.Button1Click(Sender: TObject); begin FindAll('C:\winnt\*.mcf',faAnyFile,ListBox1.Items);
Tusind tak Stoney. Det virker perfekt. Dog forstår jeg ikke rigtigt koden. Gider du ikke forklare lidt om de forskellige ting? De 3 ting jeg specielt gerne vil have forklaret er: TSearchRec, FindFirst, Res, faAnyFile og FindNext
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.