zjisteni poctu souboru/adresaru
Robert Vojta
robert na v0jta.net
Středa Říjen 31 22:48:27 CET 2001
> Delam program, ktery musi zjistovat, kolik je souboru/adresaru v urcitem
> adresari. V shellu bych to cislo dostal ls -l | wc -l, ale ja to potrebuju
> udelat v Cecku.
A jestli to potřebujete přesně, tak ještě grepnout pryč věci jako 'celkem',
... a když to chcete i rekurzivně, tak musíte k 'ls -l' dát 'ls -lR' a
vygrepovat pryč prázdné řádny, adresáře a celkem.
> Je sice jednoduche projet vsechno opendir/readdir, ale to je trochu pomale
> a vycerpavajici. Nejde to udelat nejak rychleji/efektivneji?
Myslíte si, že kombinace 'ls -l | wc -l' je rychlejší než něco jako ...
int cnt = 0;
DIR *d;
d = opendir("adresar");
while (readdir(d)) cnt++;
closedir(d);
... o tom silně pochybuju a jaksi nevím co je na tom vyčerpávajícího.
BTW v dalším příspěvku byl zmiňován 'scandir', který opravdu vrátí počet
položek v adresáři, ale mezi tím pro každou položku, resp. strukturu dirent
provede malloc() a vy na konci ještě musíte provést u všech těchto položek
free(), pak ještě tyto položky na přání třídí, ... -> tak to se taky nehodí.
Jenže záleží co přesně chcete vypočítat, takže se vám asi ta režie trochu
zvedne, protože u každé položky budete muset provést stat() aby jste zjistil
o co jde (adresář, soubor, link, ...) a podle toho se zachovat, tj. započítat,
nezapočítat, rekurzivně protraverzovat i adresáře, atd.
--Robert V0jta
--
Never test for an error condition you don't know how to handle. --Steinbach
------------- další část ---------------
A non-text attachment was scrubbed...
Name: [žádný popis není k dispozici]
Type: application/pgp-signature
Size: 240 bytes
Desc: [žádný popis není k dispozici]
URL: <http://www.linux.cz/pipermail/linux/attachments/20011031/8433b4fe/attachment.sig>
Další informace o konferenci Linux