Procházení adresáře – Delphi – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Procházení adresáře – Delphi – Fórum – Programujte.comProcházení adresáře – Delphi – Fórum – Programujte.com

 

oxidián0
Grafoman
2. 5. 2018   #1
-
0
-

Moje funkce

function createTestyDirsList(TestyDir: string):TStringList;
var i: Integer;
  TestyDirs : TStringList; // for folders sreach
  SearchRecord : TSearchRec;
begin
  TestyDirs := TStringList.create();

  if FindFirst(TestyDir,faDirectory,SearchRecord)=0 then
    begin

    while FindNext(SearchRecord) = 0 do
      begin
        if (SearchRecord.Attr = 16 {faDirectory}) and (SearchRecord.Name <> '.') and (SearchRecord.Name<>'..') then
          TestyDirs.Add(SearchRecord.Name);
      end;
    SysUtils.FindClose(SearchRecord);
    end;

  Result := TestyDirs;
end;

Volám ji

TestyDir := "P:\PROGRAMY\programování\PAS\delphi7\Projects\heb\Testy";

TestyDirs := createTestyDirsList(TestyDir);


V tom adresáři mám několik adresářů, ale problém je, že se mi nepřidají do seznamu. To while to completně přeskočí a projde to na SysUtils.FindClose(SearchRecord) ještě než by se cokoliv přidalo.

Nahlásit jako SPAM
IP: 78.102.61.–
mjseven0
Návštěvník
2. 5. 2018   #2
-
+1
-
Zajímavé

Minimálně by to chtělo nastavit výchozí složku pro hledání a ve funkci FindFirst je první parametr maska pro názvy souborů které hledáš.

Osobně bych to celé napsal nějak takto:

 

function createTestyDirsList(TestyDir: string): TStringList;
var
  searchResult: TSearchRec;
begin
  Result := nil;
  //nastaveni vychoziho adresare
  SetCurrentDir(TestyDir);

  if findfirst('*', faDirectory, searchResult) = 0 then
  begin

    repeat
      // chci jen slozky
      if (searchResult.attr and faDirectory) = faDirectory then
      begin
        if NOT Assigned(Result) then
        begin
          Result := TStringList.Create;
        end;

        Result.Append(searchResult.Name);
      end;
    until FindNext(searchResult) <> 0;

  end;
  FindClose(searchResult);

end;
Nahlásit jako SPAM
IP: 80.188.191.–
gna
~ Anonymní uživatel
1891 příspěvků
2. 5. 2018   #3
-
0
-

1. Takhle ti to asi vrátí jen záznam pro ten jeden adresář. Jestli chceš jeho obsah, tak asi bude potřeba přídat za to ještě masku.

2. Už FindFirstDalší v případě úspěchu naplní ten SearchRecord. Takhle ho přeskakuješ.

3. V Attr asi může být více flagů. Netestoval bych rovnost.

if FindFirst(TestyDir + '\*', faDirectory, SearchRecord) = 0 then
begin
  repeat
    if (SearchRecord.Attr and faDirectory) = faDirectory
      ..
  until FindNext(searchResult) <> 0;
  FindClose(SearchRecord);
end;
Nahlásit jako SPAM
IP: 213.211.51.–
oxidián0
Grafoman
2. 5. 2018   #4
-
0
-

Díky moc. Teda ja v původním kódu viděl tu masku, jenže jsem ji odstranil, tak to přestalo fungovat.

Nahlásit jako SPAM
IP: 78.102.61.–
MilanL+1
Grafoman
2. 5. 2018   #5
-
0
-

#4 oxidián
měl by sis zálohovat zdroje nebo použít nějaký verzovací program.

Tedy nevím jak D2007, ale 2010 si ukládají historii ukládání změn.

Nahlásit jako SPAM
IP: 185.112.167.–
oxidián0
Grafoman
2. 5. 2018   #6
-
0
-

čas od času to zálohuju ručně. Obvykle když něco rozjedu. V Delphi mi to jde pomalu tak asi jednou dvakrát za týden.

Nahlásit jako SPAM
IP: 78.102.61.–
MilanL+1
Grafoman
3. 5. 2018   #7
-
0
-

#6 oxidián
jinak taková drobnost, TString a TStringList z funkce mi nějak zlobili, lepší je konstrukce s  výstupním TStrings nebo TStringList v argumentech.

procedure/funkction xxx (var vystup : TStrings /TStringList ; .....)

proto to ty funkce jako např. ExtractStrings  tak mají, žze je výstupní pole argumentem procedury/funkce

Nahlásit jako SPAM
IP: 91.139.9.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 7 hostů

Podobná vlákna

špatné vypisování adresáře — založil hujukulu

Prava na zlozky(adresare) — založil george

Vyber souboru z adresare — založil Row

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý