e-mail    Debatní kniha    Mapa stránek    Hlavní  
 perličky 
 

Kolik toho je?

Ing. Kazda František

Běžné programy pro správu souborů pod dosem (M602, NC) neumějí spočítat velikost, kterou zabírají všechny soubory v daném adresáři včetně souborů v podadresářové struktuře. Každý, kdo pracuje s počítačem, určitě už na tento problém narazil. Pomoc je velice jednoduchá, stačí krátký prográmek. Ten nabízený je v C++, ale snadno si ho přepíšete i do Pascalu. Program po zavolání sečte velikost a počet souborů v aktuálním adresáři včetně celé podadresářové struktury.

Jak program pracuje -- Používá funkce findfirst a findnext s parametry $*.*$ a 0x37 pro vyhledávání všech souborů a adresářů. Pokud najde adresář, zanoří se do něj a volá se rekurzívně (pokud jde o adresář "." nebo "..", pokračuje dále a nezanořuje se). Když najde soubor, přičte jeho velikost ke globální proměnné a inkrementuje globální proměnnou počítající počet souborů. Pokud nenajde žádný další soubor nebo adresář, vypíše výsledek a ukončí činnost.

// program pro zjištění velikosti souborů v celé // podadresářové struktuře # include <dir.h> # include <conio.h> # include <stdio.h> # include <process.h> # include <string.h> # include <stdlib.h> long sizef=0; // velikost souborů long numbf=0; // počet souborů void chyba() // vypíše chybové hlášení { perror("CHYBA:"); exit (4); } void prohledej() { struct ffblk actfile; // pomocná struktura souboru char tam[4]=".\\"; // path pro zanořování adresářů char zpet[4]=".."; // path pro návrat char *pom; if ( !findfirst("*.*",&actfile,0x37) ) // hledá soubory a adresáře do{ if ( (actfile.ff_attrib & 0x10) == 0x10 ) // je to adresář { if ( actfile.ff_name[0] != '.') // není . nebo .. if ( !chdir(pom=strcat(strdup(tam), actfile.ff_name)) ) // přepne se do podadr. { free(pom); printf("."); prohledej(); // rekurzivně se zavolá if ( chdir(zpet) ) chyba(); // přepne se do rodičovského adresáře } else chyba(); } else // je to soubor { ++numbf; // sčítá počet souborů sizef+=actfile.ff_fsize; // sčítá vel.souborů } } while ( !findnext(&actfile) ); // dokud něco je... } main() { clrscr(); printf("\n\n Program secte velikost vsech souboru v aktualnim adresari\n"); printf("vcetne souboru v podadresarich\n\n"); printf("Cekejte pracuji ..."); prohledej(); printf("\n\n\n\nCelkem souboru:\n"); printf(" %lu\n",numbf); printf("\nCelkova velikost:\n"); printf(" %lu Byte\n\n\n",sizef); }


Pascal - hlavní
Překladače
Vlastní články
Převzaté články
Věci na stáhnutí
Odkazy k tématu
BP7 buglist
Chyba Run-time 200

BASIC