Avatar billede hestetoften Nybegynder
25. december 2004 - 15:07 Der er 7 kommentarer og
1 løsning

vise filer i ikke undermapper ?

Denne viser alle txt filer i undermapperne
hvordan får jeg den til også at vise txt filerne i den pågældende mappe incl undermapper ??


function TForm1.FindTxt(Path, Ext: string): TStringList;
var
  SR: TSearchRec;
begin
  Result := TStringList.Create;
  if FindFirst(Path + Ext, faArchive, SR) = 0 then
    try
      repeat
        Result.Add(Path + SR.Name);
      until FindNext(SR) <> 0;
    finally
      FindClose(SR);
    end;
end;

procedure TForm1.Search(Path, Ext: string);
var
  SR: TSearchRec;
  i: Integer;
  Strings: TStringList;
begin
  Path := Path + '\';
        if FindFirst(Path + '*.*', faDirectory, SR) = 0 then
    try
      repeat
        if ((SR.Attr and faDirectory) <> 0) and (SR.Name[1] <> '.') then
        begin
          Strings := FindTxt(Path + SR.Name + '\', Ext);
          try
            i := 0;
            while i < Strings.Count do
            begin
              ListBox1.Items.Add(Strings[i]);
              Inc(i);
            end;
          finally
            Strings.Free;
          end;
        end;
      until (FindNext(SR) <> 0);
    finally
      SysUtils.FindClose(SR);
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ListBox1.Items.Clear;
  Search('C:', '*.txt');
end;
Avatar billede nico26 Nybegynder
26. december 2004 - 00:28 #1
det her burde virke, men det kan gøres pænere

procedure TForm1.Search(Path, Ext: string);
var
  SR: TSearchRec;
  i: Integer;
  Strings: TStringList;
begin
  Path := Path + '\';

  strings := FindTxt(Path, Ext);
  try
    i := 0;
    while i < Strings.Count do
    begin
      ListBox1.Items.Add(Strings[i]);
      Inc(i);
    end;
  finally
    strings.Free;
  end;
        if FindFirst(Path + '*.*', faDirectory, SR) = 0 then
    try
      repeat
        if ((SR.Attr and faDirectory) <> 0) and (SR.Name[1] <> '.') then
        begin
          Strings := FindTxt(Path + SR.Name + '\', Ext);
          try
            i := 0;
            while i < Strings.Count do
            begin
              ListBox1.Items.Add(Strings[i]);
              Inc(i);
            end;
          finally
            Strings.Free;
          end;
        end;
      until (FindNext(SR) <> 0);
    finally
      SysUtils.FindClose(SR);
    end;
end;
Avatar billede hestetoften Nybegynder
26. december 2004 - 11:40 #2
Prøver den lige !
Avatar billede hestetoften Nybegynder
26. december 2004 - 14:52 #3
Virker .. tak
Læg svar for point
Avatar billede hestetoften Nybegynder
26. december 2004 - 15:17 #4
Den tager kun første undermappe med,
kan den laves så den tager alle undermapper med ??
Avatar billede nico26 Nybegynder
26. december 2004 - 15:57 #5
du skal vist bare flytte den første if ind i repeat blokken

procedure TForm1.Search(Path, Ext: string);
var
  SR: TSearchRec;
  i: Integer;
  Strings: TStringList;
begin
  Path := Path + '\';

  strings := FindTxt(Path, Ext);
  try
    i := 0;
    while i < Strings.Count do
    begin
      ListBox1.Items.Add(Strings[i]);
      Inc(i);
    end;
  finally
    strings.Free;
  end;
       
    try
      repeat
        if FindFirst(Path + '*.*', faDirectory, SR) = 0 then
          if ((SR.Attr and faDirectory) <> 0) and (SR.Name[1] <> '.') then
          begin
            Strings := FindTxt(Path + SR.Name + '\', Ext);
            try
              i := 0;
              while i < Strings.Count do
              begin
                ListBox1.Items.Add(Strings[i]);
                Inc(i);
              end;
            finally
              Strings.Free;
            end;
          end;
      until (FindNext(SR) <> 0);
    finally
      SysUtils.FindClose(SR);
    end;
end;
Avatar billede nico26 Nybegynder
26. december 2004 - 16:07 #6
min fejl - det gå selvfølegelig ikke. Du skal bruge FindNext i loopet

procedure TForm1.Search(Path, Ext: string);
var
  SR: TSearchRec;
  i: Integer;
  Strings: TStringList;
begin
  Path := Path + '\';

  strings := FindTxt(Path, Ext);
  try
    i := 0;
    while i < Strings.Count do
    begin
      ListBox1.Items.Add(Strings[i]);
      Inc(i);
    end;
  finally
    strings.Free;
  end;
       
  if FindFirst(Path + '*.*', faDirectory, SR) = 0 then
    try
      repeat
        if FindNext(SR) = 0 then
          if ((SR.Attr and faDirectory) <> 0) and (SR.Name[1] <> '.') then
          begin
            Strings := FindTxt(Path + SR.Name + '\', Ext);
            try
              i := 0;
              while i < Strings.Count do
              begin
                ListBox1.Items.Add(Strings[i]);
                Inc(i);
              end;
            finally
              Strings.Free;
            end;
          end;
      until (FindNext(SR) <> 0);
    finally
      SysUtils.FindClose(SR);
    end;
end;
Avatar billede hestetoften Nybegynder
26. december 2004 - 21:01 #7
Den får jeg nu ikke til at virke !
Avatar billede hestetoften Nybegynder
15. september 2005 - 00:13 #8
Lukker
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester