Operațiunile de fișiere utilizând shellapi


Operațiuni de fișiere utilizând ShellAPI.

Operațiuni de fișiere utilizând ShellAPI.

hNameMappings
Un mâner pentru obiectul de afișare a numelui fișierului care conține o matrice de structuri SHNAMEMAPPING. Fiecare structură conține nume de cale vechi și noi pentru fiecare fișier care a fost mutat, copiat sau redenumit. Acest element este utilizat numai dacă este setat steagul FOF_WANTMAPPINGHANDLE.

lpszProgressTitle
Un pointer la un șir folosit ca titlu pentru caseta de dialog de progres. Acest element este utilizat numai dacă este setat steagul FOF_SIMPLEPROGRESS.

Notă.
Dacă nu sunt specificate pFrom sau pTo, sunt preluate fișierele din directorul curent. Directorul curent poate fi instalat folosind funcția SetCurrentDirectory și obținut prin funcția GetCurrentDirectory.

Și acum - exemple.

Desigur, trebuie să introduceți modulul ShellAPI în secțiunea utilizări. în care este definită funcția SHFileOperation.

Luați în considerare cel mai simplu lucru - ștergerea fișierelor.

Rețineți că niciunul dintre pavilioane nu este setat. Dacă doriți să nu ștergeți numai fișierele, ci să le mutați în coșul de gunoi, trebuie să setați pavilionul FOF_ALLOWUNDO.

Pentru comoditatea experimentelor ulterioare, vom scrie o funcție care creează un tampon dintr-o matrice de șir pentru a-l transmite ca parametru pFrom. După fiecare linie, un bajt zero este introdus în tampon, la sfârșitul listei se introduc doi octeți zero. Arată îngrozitor, dar funcționează. Puteți scrie mai frumos, doar lene.

Și, în sfârșit, o funcție care șterge fișierele transferate în lista de nume. Parametrul ToRecycle determină dacă fișierele sunt mutate în Coșul de reciclare, sau șterse. Funcția returnează 0 în cazul în care operațiunea a avut succes, și o valoare diferită de zero în cazul în mâinile cuiva care nu cresc în afara locului, și că cineva este blocat în numele funcțiilor de fișiere inexistente. Rețineți că eliberăm tamponul Src prin simpla atribuire a valorii zero. Dacă noi credem documentația, pierderi de memorie nu se întâmplă, ci dimpotrivă, există o distrugere corectă a unui tablou dinamic. Cum, adevărul este cancerul de creier :-).

Verificați. Se pare că totul funcționează.

Apropo, am arătat o eroare de amuzant - o procedură de apel DeleteFiles astfel: „Test1“ și fișierele „Test2“ sunt eliminate complet, fara a pune coș, în ciuda pavilion FOF_ALLOWUNDO stabilit. Morala: dacă utilizați funcția SHFileOperation folosind căi complete ori de câte ori este posibil.
Ei bine, cu eliminarea fișierelor sortate.

Următoarea funcție mută fișierele specificate în lista Src în directorul Dest. Parametrul Mutare specifică dacă fișierele vor fi mutate sau copiate. Parametrul AutoRename specifică dacă doriți să redenumiți fișierele în cazul unui conflict de nume. Ei bine, vom verifica. E în regulă (și unde merge).

Există, totuși o altă posibilitate - pentru a muta o mulțime de fișiere, fiecare în directorul său într-o singură ședință, dar cu greu îmi pot imagina cine ar putea fi necesare.

A rămas ultima operație - redenumirea.

Asta e tot pentru moment.
Modulul FileOp.pas (3K) este atașat.