În această lecție vom cunoaște principiile de bază ale organizării programelor de căutare a fișierelor. Mai întâi, să definim de ce avem nevoie de acest lucru. De exemplu, trebuie să scanați un director specific pentru prezența fișierelor DOC atunci când rulați programul și dacă le aveți deschise pentru editare sau tiparere. Și cum vă place această idee: căutarea de fundal pentru fișierul EXE din rețea și când este detectată o nouă versiune, actualizarea automată.
Sunt cunoscute multe programe unde puteți căuta fișiere, reguli de căutare a fișierelor. Fișierele pot fi căutate ca și în cazul comandanților de fișiere (Norton, lupi, dos navigator, faruri), deci în orice sistem de operare. În sistemul de operare Windows, caseta de dialog pentru căutarea fișierelor se numește "Start" - "Căutare" - "Fișiere și foldere". În fereastra deschisă este necesar să specificați starea fișierului dorit (nume, mască) și calea căutării inițiale (director). În celelalte file ale acestei casete de dialog, puteți extinde capacitățile de căutare după data schimbării, prin textul conținut, după dimensiune.
Amintiți-vă regulile pentru căutarea fișierelor. Puteți specifica atât numele fișierului de căutare, cât și masca acestuia, dacă numele este necunoscut sau este necesar să găsiți mai multe. Ie Folosind un model special de căutare, puteți organiza condițiile de preluare a fișierelor găsite. Faceți imediat o rezervare că căutarea poate fi aplicată atât fișierelor, cât și directoarelor. Le vom numi elementele sistemului de fișiere. Modelul de mască al elementelor căutate poate include:
- Scrisori și numere în titlu și expansiune.
- Simbolul * (un asterisc, semnul matematic "se înmulțește"), înlocuind orice număr de litere și cifre posibile în nume sau extensie.
- Simbolul. (semn de întrebare), care înlocuiește o literă sau un număr în numele sau extensia elementului căutat.
De exemplu, căutați toate fișierele text cu o extensie TXT. În câmpul numelui fișierului trebuie să introduceți "* .TXT" (scris fără ghilimele), iar sistemul va găsi toate aceste fișiere în unitatea sau directorul specificat. Dacă trebuie să găsiți toate fișierele numite spermă, atunci în câmpul de căutare a fișierelor trebuie să introduceți "spermă. *". Dacă trebuie să găsiți elemente cu a treia literă k și prima literă t din extensie, introduceți "?? k * .t *". Aici semnul de întrebare indică orice simbol, al treilea caracter este k, numele fișierului (directorul) poate fi format din orice număr de litere și cifre, indicăm un asterisc. În extensie, prima literă este t, apoi urmează orice extensie.
Notă: fișierele și directoarele din sistemul de operare Windows sunt căutate fără a lua în considerare cazul, adică literele mici și majuscule nu diferă.
Acum, ia în considerare un program de căutare a fișierelor utilizând limbajul de programare pascal obiect.
Întreaga organizare a ciclului de căutare, și acesta este tocmai ciclul cu continuarea căutării, se reduce la:
- Specificați condițiile de căutare. Acesta este directorul și masca elementului sau elementelor pe care le căutați, atributele elementului (elementelor). Când se specifică condițiile de căutare, se caută imediat prima condiție de potrivire. Aceasta este funcția FindFirst.
- Continuați căutarea următorului element în condițiile specificate în prima clauză. Aceasta este funcția FindNext și poate fi apelată de câte ori este necesar până când se găsesc toate fișierele și directoarele care satisfac această condiție.
- Închiderea căutării și eliberarea memoriei alocate de sistem pentru căutare. Comanda FindClose.
Funcția FindFirst.
unde: directorul de căutare și masca elementului de căutare - o valoare String care este de tipul String, de exemplu, poate conține 'c: \ *. *' - toate elementele din rădăcina unității C. Rețineți că specificați calea completă de căutare.
Atributele elementului căutat sunt atributele utilizatorului sau ale sistemului, care pot avea un fișier (director, etichetă de disc). Aici este lista lor:
- faReadOnly - Fișiere numai pentru citire. Acest atribut este instalat pe fișiere care nu sunt recomandate a fi modificate, șterse. Un astfel de atribut are fișiere, de exemplu, scrise pe CD-ROM.
- faHidden - Fișiere ascunse. Cu setările obișnuite ale browserului și ale comandantului, aceste fișiere sunt invizibile.
- faSysFile - Fișiere de sistem.
- FaVolumeID - Fișierul etichetei discului. Un astfel de element din numele său are numele discului (maxim 11 caractere).
- faDirectory - atributul atributului catalog.
- faArchive - Un dosar obișnuit. Implicit, este instalat pe fișierele nou create.
- faAnyFile - Dacă setați atributul elementelor care urmează să fie căutate, atunci toate atributele de mai sus vor fi căutate.
Acestea trebuie să căutați numai elemente care au atributul "director" și "ascuns", apoi puteți aplica un semn de adăugare matematică, de exemplu faDirectory + faHidden.
Variabila de căutare este de tipul TSearchRec. În acesta, cu un rezultat de căutare reușit, vor fi introduse toate informațiile necesare despre elementul de fișier găsit.
Deoarece FindFirst este o funcție, trebuie să returneze o valoare în sine. Această valoare este de tip Integer și înseamnă rezultatul căutării fișierelor (cod de eroare de căutare). Dacă fișierul este găsit, este nevoie de o valoare zero.
Funcția FindNext.
Această funcție continuă căutarea specificată în funcția FindNext. Returnează valoarea rezultatului căutării (zero în cazul în care căutarea a avut succes).
Procedura FindClose.
Închide căutarea și eliberează memoria alocată de sistem pentru căutarea.
Acum ia în considerare un exemplu. Să presupunem că trebuie să găsim toate fișierele și directoarele din directorul DELPHI pe unitatea C. În viitor, poți să-ți schimbi singuri termenii de căutare schimbând masca. Pentru formularul cu componenta ListBox1 și butonul Button1, răspunsul la OnClick cu butonul:
Eșantionul de cod prezentat este, în principiu, baza pentru organizarea unei căutări mai aprofundate, căutarea fișierelor după timpul de creare, prin conținutul cuvintelor. Dacă executați acest program pentru execuție, atunci când faceți clic pe butonul1, veți vedea elementele "." În lista de pe primul și al doilea rând. și "..". Acestea sunt elemente care au atributul "director". Primul conține un link către directorul rădăcină al discului, al doilea conține o legătură către directorul de nivel superior. Cu a doua se întâlnește în cochilii de comandă a discului, de exemplu Norton, când selectați directorul ".." și faceți clic pe "intrare". Astfel, vă aflați în catalog la nivelul de mai sus. Firește, în programul nostru de căutare, astfel de elemente nu trebuie să fie listate, așa că ignorăm constatările lor. Corectați procedura pentru a da clic pe butonul1:
În acest caz, dacă există un director numit "." sau cu numele "..", programul va continua să proceseze bucla de căutare fără a afișa numele elementului găsit în componenta listei ListBox1.
Acum, ia în considerare tipul TSearchRec. Are câteva proprietăți utile:
- Nume - numele directorului găsit (fișier);
- Dimensiune - dimensiunea fișierului în octeți;
- Attr - atribute ale directorului (fișier);
- Timp - valoarea ambalată a timpului și datei creării directorului (fișierului).
Toate proprietățile de mai sus pe care le-am luat deja în considerare sau sunt imediat de înțeles, cu excepția proprietății Time. Este de tip Integer și conține o valoare ambalată a datei și orei în care fișierul a fost creat. Despachetarea este efectuată utilizând funcția FileDateToDateTime, care ca rezultat returnează valoarea datei și orei.
Acum adăugați în formularul nostru componenta DateTimePicher1 (pagina Win32) și adăugați câteva linii.
După cum ați observat deja, vom selecta fișiere și directoare până la data creării, începând cu data specificată în componenta DateTimePicker1.
Încercați acum să organizați căutarea de fișiere în toate subdirectoarele. Nu este la fel de simplu cum ar părea la prima vedere. Va trebui să organizăm manual întreaga bucla de intrare și ieșire din director, să răsfoim fișierele. Un pic de material complicat, dar probabil acei dintre voi care au lucrat deja cu limbajul de programare pascal sau alții sunt familiarizați cu tehnologia de utilizare multiplă și multiplă a aceluiași cod de program. Explicați pe scurt algoritmul acestui program.
- Setați condițiile de căutare inițiale, căutați primul element.
- Dacă se găsește un fișier, apoi ieșiți-l și procesați corespunzător (ieșiți în listă, deschideți, ștergeți etc.).
- Dacă se găsește un director, începem o nouă procedură de căutare. Dar codul rămâne același. Doar sunați din nou și introduceți aceeași procedură de căutare.
- Procesăm în același mod toate fișierele și directoarele incluse în acest director (începem o nouă căutare în directorul detectat).
- Dacă nu există mai multe elemente în sub-director, procedeul de căutare este terminat în el și îl părăsim. În același timp, ne aflăm în același loc din care a fost numită această procedură. Dar ea a fost chemată din aceeași procedură. Prin urmare, programul continuă executarea acestuia din momentul întoarcerii.
Astfel, cât de multe înfășurări de programe se învârt în așa-numita încurcătură, atât de multe transformări se vor relaxa. Programul de execuție trece toate arborii din directoarele imbricate, realizând același cod de program! Astfel, datele privind condițiile de căutare nu sunt confundate și pentru fiecare procedură unică sunt salvate.
Să luăm în considerare un exemplu. Creați un nou proiect. Pentru a crea o procedură de căutare separată, trebuie să o declarăm în secțiunea corespunzătoare (o creăm manual, de aceea noi o spunem noi).
În secțiunea publică, scrieți linia:
Și în secțiunea de cod a programului, înainte de cuvântul "sfârșit". introduceți un schelet gol al procedurii
Pe formular, introduceți lista lista ListBox1, Button1, Edit1. Pentru componenta Edit1, setați proprietatea Text la "c: \ delphi". Acordați atenție ultimului caracter, caracterul "", a cărui prezență în căutarea inițială este necesară. Apoi, procedura OnClick pentru Button1 arată astfel:
Procedura noastră de căutare creată manual:
Dacă specificați folderul rădăcină al discului ca fiind condiția inițială pentru căutarea fișierelor în componenta Edit1, de exemplu "C:", atunci veți obține o listă completă a tuturor fișierelor de pe acest disc. Acordați atenție vitezei de căutare a fișierelor și vitezei programului.
procedura / denumirea procedurii;
aloca fișierul (f,); // legați fișierul la variabila
Resetați (f); // deschideți-l pentru citire
readln (f, s); / citiți o linie. De fiecare dată când se solicită procedura, se citește următoarea linie
în cazul în care EOF (f) apoi Break; // în cazul în care sfârșitul fișierului, apoi ieșiți din bucla
// în continuare procesăm această linie așa cum aveți nevoie
Până la // aici pentru otmazy introduceți o anumită condiție a sfârșitului ciclului, care totuși nu ar trebui executată până la sfârșitul verificării fișierului
Funcționează numai pentru fișierele text ale oricărei extensii. Pentru a procesa fișiere non-text (doc, html, etc.), avem nevoie de un alt algoritm (nu am tratat niciodată aceste fișiere, nu știu)