Einzelnen Beitrag anzeigen

mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Prüfen ob ein verzeichnis die gewünschte erweiterungen h

  Alt 15. Okt 2006, 16:55
@ErazerZ
dein code geht leider nicht in unterverzeichnise rein

@marabu
dein codem bring leider das gleiche ergbnis wie mein code:
also hier mal bischen mehr code:
Delphi-Quellcode:
function GetFilesInDirectory(ADirectory: string; AMask: String; ARekursiv: Boolean):Boolean;
var
  SR: TSearchRec;
  ok:Boolean;
begin
  ok:=False;
  if (ADirectory<>'') and (ADirectory[length(ADirectory)]<>'\') then ADirectory:=ADirectory+'\';
  if (FindFirst(ADirectory + '*.*',faAnyFile ,SR)=0) then begin
    repeat
      if (SR.Name[1]<>'.') and ((sr.Attr or faAnyFile) = faAnyFile) and (pos(UpperCase(ExtractFileExt(sr.name)),AMask) > 0)then begin
        ok:=True;
        result:=ok;
      end
    until (ok ) or (FindNext(SR)<>0);
    FindClose(SR);
  end;

  if ARekursiv then
    if (FindFirst(ADirectory+'*.*',faDirectory,SR)=0) then begin
      repeat
        if (sr.name[1] <> '.') and (sr.Attr and faDirectory >0) then begin
          GetFilesInDirectory(ADirectory+sr.name,AMask,ARekursiv);
        end;
      until (FindNext(SR)<>0);
      FindClose(SR);
    end;
 result:=ok;
end;
procedure TPlaylisten.LoadDir(dir:String; var t:Boolean);
var
  search: TSearchRec;
  directory: string;
  sl:TStringList;
  count:Integer;
begin
  directory := ExtractFilePath(dir);
  t:=GetAnderDir(dir,stdext,faAnyFile or faDirectory );
  if FileCount(directory,'*.M4A')>0 then begin
    if Assigned(onPlaylisteAdd) then
    onPlaylisteAdd(directory ,GetPrvDir(directory));
  end;

  // find all files
  // damit auch verzeichnise eingelesen werden die keine unterverzeichnise enhalten
  if (isAnder = False) and (FileCount(directory,'*.M4A')>0) then begin
    if Assigned(onPlaylisteAdd) then
    onPlaylisteAdd(directory ,GetPrvDir(directory));
  end;

  if FindFirst(directory + '*.*', $23, search) = 0 then begin
    repeat
      if pos(uppercase(ExtractFileExt(search.name)),stdext) > 0 then begin
        if Assigned(onAddItem) then
          onAddItem(directory + search.Name,search.Name);
      end;
    until FindNext(search) <> 0;
  end;

  // Subdirectories/ Unterverzeichnisse
  if FindFirst(directory + '*.', faDirectory, search) = 0 then begin
    repeat
      if ((search.Attr and faDirectory) = faDirectory) and (search.Name[1] <> '.') then begin
        isAnder:=True;
        if t = False then
        if (Assigned(onPlaylisteAdd)) and ((FileCount(directory,'*.M4A')>0)) then onPlaylisteAdd(directory + search.Name,search.Name);
        LoadDir(directory + search.Name + '\',t);
        isAnder:=False;
      end;
    until FindNext(search) <> 0;
    FindClose(search);
  end;
  //if t = false then
  if Assigned(onplaylistnewadd) then onplaylistnewadd(GetAnderDir(directory + search.Name + '\',stdext,faDirectory));
end; // LoadDir
so loaddir soll jetzt verschiedne verzeichnise komplet einlesen und dabei sortieren das einlesen habe ich hinbekommen nur das mit der Filterfunktion leider nicht.
ich erzeuge daraus eine baumstruktur darum die drei ereignise ich denke sie sollte selbsterkläerend sein.
ich hatte folgende gedanken:

programm sucht im angeben verzeichnise nach unterverzeichnisen mit den entsprechenden endungen.
findet es was soll der root knoten das suchverzeichnis dastellen z.b.
ich suche jetzt in c:\music soll der rooknoten music heißen
soablt er was findet soll er es den root knoten hinzufügen
dann das nächte verzeichnis: sind dort die gesuchten dateien drin hinzufügen zum baum allerding soll das hauptverzeichnis von den dateien ebenfall im zum root dazugeben werden z.b.
c:\Music\1\1.m4a

jetzt suche ich nach m4a soll der baum so aussehen:
Music
1
1.m4A

ich hoffe ihr versteht wie ich meine. ich schaffe es einfach nicht.
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat