Serializarea serverelor gunsmoker - informații generale despre fișiere

Mai întâi de toate, să ne amintim ce este un fișier. Un fișier este un dispozitiv cu acces în serie, care poate fi accesat prin nume. Fișierul cel mai tipic este fișierul de pe disc. Dar într-un sens mai larg, fișierul este, de asemenea, un dispozitiv de fișiere - cum ar fi o conexiune de rețea, fluxuri de date, canale de conducte și așa mai departe. În consecință, operația de scriere sau de încărcare a datelor din fișiere pe un disc poate fi văzută într-un sens mai larg, în ceea ce privește orice fișiere.







Fișierele pe dispozitive externe (discuri) sunt adesea numite fișiere fizice. Ei au nume compilate în conformitate cu regulile de numire ale fișierelor sistemului de operare. De exemplu, pe Windows, acesta este:
  • myfile.txt
  • myfile.txt
  • C: \ MyFile.txt
  • C: \ MyFolder \ MyFile.txt
  • .\ MyFile.txt
  • .\ .. \ MyFile.txt

    Denumirea fișierelor

    Toate sistemele de fișiere urmează același sistem de denumire comun pentru fișierele individuale: numele fișierului de bază (MyFile) și extensia de fișier (txt) separate de o perioadă. Numele fișierului de bază, împreună cu extensia de fișier, se numește numele fișierului. (Myfile.txt). Cu toate acestea, fiecare sistem de fișiere (cum ar fi NTFS, CDFS, exFAT, UDF, FAT și FAT32) pot avea reguli specifice și diferite pentru formarea componentelor individuale din calea către directorul sau fișierul. Vă rugăm să rețineți că directorul (de asemenea, numit un director), concepute pentru a gestiona fișiere pe categorii, - este pur și simplu un fișier cu un atribut special care îl marchează ca un director, dar restul directoarele trebuie să urmeze toate aceleași reguli de denumire ca fișiere obișnuite. Deoarece termenul „directorul“ pur și simplu se referă la un tip special de fișier, unele materiale de referință care utilizează termenul general de „dosar“ pentru a acoperi atât conceptele catalog și conceptul de fișier de date ca atare. Din această cauză, dacă nu se specifică altfel, orice nume și reguli de utilizare sau exemple pentru fișier sunt de asemenea aplicabile directoarelor. Directorul nu trebuie confundat cu dosarul. Un dosar este un concept mai general. Directory este întotdeauna reprezentat fizic pe disc, precum și dosarul poate fi un director, și reprezintă un (logic) locație virtuală - „My Computer“, de exemplu, dosarul „Locațiile mele din rețea“, sau Directorul de nivel superior de pe disc se numește directorul rădăcină. Directorul rădăcină este întotdeauna unic, dar fiecare disc are propriile sale.

    În fiecare director, cu excepția directorului rădăcină, există pseudo-directoare cu nume rezervate special. (punct) și. (două puncte). Director. se referă la același director. - la cea anterioară (directorul principal, directorul de nivel superior).

    Termenul „calea“ se referă la una sau mai multe directoare (sau foldere) separate printr-un backslash (\ - backslash, backslash, backslash), și, eventual, în numele volumului (C :) sau numele serverului (\\ server . \\? \ UNC \ server sau \\? \ C :). Notă: în unele versiuni Far Eastern de Windows, un alt caracter este folosit pentru delimiterul de cale. dar trebuie să înțelegem că acesta este exact același simbol (cu același cod ANSI), ci doar arată diferit.

    În total, Windows utilizează trei tipuri de căi:
    1. LFS (Sistemul de fișiere local) - nume în sistemul de fișiere local, de exemplu: C: \ MyFolder \ MyFile.txt
    2. UNC (Convenția uniformă de numire) - nume UNC de rețea, de exemplu: \\ server \ MyFolder \ MyFile.txt
    3. Lung UNC sau UNCW - nume de fișiere lungi, de exemplu: \\ \ UNC \ server \ \\ \ C MyFolder \ myfile.txt sau: \ MyFolder \ myfile.txt ??
    Calea fișierului împreună cu numele fișierului se numește numele de fișier complet (C: \ MyFolder \ MyFile.txt). Fiecare director, numele volumului și numele fișierului din cale sunt denumite componente de cale.

    Unul dintre directoarele de pe disc este activ pentru programul rulat. Se numește directorul curent. Directorul curent este întotdeauna unul, este setat când programul pornește și se poate schimba în timpul funcționării acestuia (apelând funcția de schimbare a directorului). Directorul curent este activ, funcționează - este utilizat atunci când se rezolvă numele (vezi mai jos). În plus față de directorul curent de programe, sistemul urmărește, de asemenea, separat directorul curent al fiecărui disc. Unitatea specificată în directorul curent se numește discul curent.

    Calea care începe cu numele unui volum (C: \ MyFolder \ myfile.txt), numele serverului (\\ server \ MyFolder \ myfile.txt) sau directorul rădăcină (\ MyFolder \ myfile.txt) se numește absolută - pentru că acest nume este întotdeauna unic indică același fișier, indiferent de mediul extern. În caz contrar, calea este numită o rudă (cum ar fi myfile.txt. \ Myfile.txt. \ MyFolder \ myfile.txt sau. \ .. \ MyFolder \ myfile.txt). Căile relative sunt tratate în funcție de directorul curent. Prin urmare, aceeași cale relativă se poate referi la fișiere diferite. De exemplu, calea MyFile.txt și. MyFile.txt se referă la C: \ MyFolder \ MyFile.txt. dacă directorul curent (sau directorul în legătură cu care rezolvă numele) este C: \ MyFolder \. dar aceleași nume se vor referi la D: \ Program Files \ MyFolder \ MyFile.txt. dacă directorul curent este D: \ Program Files \ MyFolder \. Nu confunda numele fișierului cu absolut. Acestea sunt concepte ușor diferite, deși ele sunt deseori văzute ca sinonime. Numele complet al fișierului este numele fișierului cu calea, numele prin care poate fi găsit fișierul. Dar nu trebuie să fie absolută. Pe de altă parte, orice nume absolut este întotdeauna un nume complet. În limba engleză, se utilizează termenul "cale complet calificată", care este un sinonim pentru calea absolută a fișierului.

    Limitările privind numărul de caractere pot fi, de asemenea, diferite și variază în funcție de sistemul de fișiere și de modul de denumire a fișierului. Acest lucru este în continuare complicat de compatibilitatea înapoi. De exemplu, vechile sisteme de fișiere MS-DOS acceptă maxim 8 caractere pentru numele fișierului de bază și 3 simboluri pentru expansiune - un total de 12 caractere, inclusiv punctul de separare. În plus, aceste nume nu ar putea include multe simboluri - de exemplu, un spațiu. Acest format de nume de fișier este cunoscut sub numele de "format de fișier 8.3" sau un nume de fișier scurt. Sistemele de fișiere Windows nu au această limitare și, deși acceptă nume de format 8.3 pentru compatibilitate înapoi, lucrează mai mult cu nume de fișiere lungi.

    Convențiile de numire

    Următoarele reguli de bază permit aplicațiilor să creeze și să proceseze nume valide pentru fișiere și directoare, indiferent de sistemul de fișiere:
    • Utilizați un punct pentru a separa numele de fișier de bază de extensia din fișier sau numele directorului. Directoarele pot avea o extensie, deși de obicei nu sunt utilizate.
    • Utilizați coloana vertebrală (\) pentru a separa componentele traseului. Înapoi în direcția lunetei separă numele fișierului de la calea la acesta, iar numele unui singur director dintr-un alt director din cale. Nu puteți utiliza o backslash ca parte a numelui unui fișier sau a unui director real, deoarece este un caracter rezervat care împarte numele întregului fișier în componente.






    • Utilizați un backslash în conformitate cu cerințele ca parte a numelui de volum, de exemplu C: \ în C: \ path \ file sau \\ server \ share în \\ server \ share \ path \ file.
    • Numele fișierelor sunt insensibile pentru litere mici. De exemplu, numele OSCAR. Oscar și Oscar se referă la același fișier. Notă: Pentru compatibilitatea cu standardul POSIX, puteți activa sensibilitatea cazurilor pentru numele de fișiere, dar acesta este un comportament nestandard și nu este recomandat pentru utilizarea în scenariile generale.
    • Numele de volum (litere de unitate) nu sunt, de asemenea, sensibile la litere mici. De exemplu, D: și d: se referă la același volum.
    • Puteți utiliza orice caracter pentru numele fișierului, inclusiv caractere Unicode, cu excepția următoarelor caractere speciale:
      • <(меньше)
      • > (mai mult)
      • : (colon)
      • "(citate duble)
      • / (slash, slash)
      • \ (înapoi, loviri înapoi)
      • | | (linia verticală, țeavă)
      • ? (semn de întrebare)
      • * (asterisc)
      • Zero (caracter NUL)
      • Simboluri ale căror coduri se află în intervalul de la 1 la 31 (cu excepția fluxurilor de date alternative unde sunt permise aceste caractere)
      • Orice alte caractere care nu suportă sistemul de fișiere de bază
    • Utilizați punctul ca o componentă de cale pentru a reprezenta directorul curent, de exemplu. \ Temp.txt.
    • Utilizați două puncte consecutive (.) Ca o componentă de cale pentru a reprezenta directorul părinte, de exemplu. \ Temp.txt.
    • Nu utilizați următoarele nume de dispozitive rezervate pentru numele fișierelor: CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, # 8203; # 8203; COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 și LPT9. De asemenea, evitați aceste nume în numele fișierelor de bază - de exemplu, NUL.txt.
    • Nu terminați numele fișierului sau directorului cu o perioadă. Deși sistemul de fișiere care stau la baza poate suporta astfel de nume, shell-ul Windows, interfața utilizator și programele de aplicație - nu. Cu toate acestea, este posibil să specificați o perioadă ca primul caracter al numelui fișierului, de exemplu. temp.

    Calea spre fișierul specificat constă într-una sau mai multe componente separate printr-un caracter special (backslash), fiecare component fiind de obicei numele directorului sau numele fișierului, dar cu câteva excepții discutate mai jos. Foarte adesea, importanța decisivă pentru interpretarea căii în sistem are începutul căii - așa-numitul prefix de cale. Acest prefix definește spațiul de nume pentru utilizare cu această cale și, în plus, ce caractere speciale pot fi folosite în cale - inclusiv ultimul caracter.

    Dacă o componentă de cale este un nume de fișier, atunci trebuie să fie ultima componentă din cale.

    Fiecare componentă de cale are, de asemenea, o limită a lungimii maxime a numelui, în funcție de sistemul de fișiere special. Cel mai adesea, aceste restricții sunt reduse la două grupuri principale: nume de fișiere scurte și lungi. Rețineți că numele de director sunt stocate în sistemul de fișiere ca un tip special de fișier, astfel încât regulile de denumire a fișierelor se aplică și în cazul denumirilor de directoare. Pentru a rezuma: o cale este pur și simplu o reprezentare de șir a ierarhiei între toate directoarele existente pentru un anumit fișier sau director.

    Căi absolute și relative

    Pentru funcțiile care funcționează cu fișiere, numele fișierului poate fi specificat în raport cu directorul curent (sau cu alt director specificat explicit) sau complet, absolut. Numele fișierului în raport cu directorul curent, dacă nu începe cu unul dintre următoarele lucruri:
    • Numele UNC al oricărui format, care începe întotdeauna cu două spate-uri (\\).
    • O denumire de unitate cu o lunetă, de exemplu: C: \ sau D: \.
    • Un backslash reprezentând directorul rădăcină - de exemplu, \ folder sau \ file.txt.
    Dacă numele fișierului pornește numai cu litera de unitate, dar fără lombare după colon, acesta este interpretat ca o cale relativă față de directorul curent de pe discul specificat. De exemplu:
    • C: tmp.txt se referă la un fișier numit tmp.txt în directorul curent pe unitatea C.
    • C: Temp \ tmp.txt se referă la fișierul tmp.txt din subfolderul Temp al directorului curent al unității C.
    Uneori, o cale este numită și relativă dacă conține un director. ca una dintre componentele sale. De exemplu:
    • . \ tmp.txt indică un fișier numit tmp.txt. localizat în directorul părinte al directorului curent.
    • . \ .. \ tmp.txt indică un fișier care are două directoare deasupra directorului curent.
    • . \ Temp \ tmp.txt indică un fișier numit tmp.txt. localizat în directorul Temp. care la rândul său este localizat în directorul părinte al directorului curent.
    • C. \ Temp \ tmp.txt indică un fișier numit tmp.txt. localizat în directorul Temp. care la rândul său este localizat în directorul părinte al directorului curent al unității C.
    • C: \ Temp \ .. \ C :. \ Temp Temp \ tmp.txt și \ \ tmp.txt - aceste două căi link către fișierul C: \ Temp \ tmp.txt. Deși nimeni nu va cere modul în această formă, dar astfel de căi pot fi obținute după lipire calea completă a mai multor componente din diferite surse. Deși calea de acest fel este absolut (non-relativă), în sensul definiției inițiale, uneori în continuare menționată ca o rudă, subliniind prezența componentei. în felul acesta.

    Limitarea maximă a lungimii căii

    În Windows, lungimea maximă a căii este MAX_PATH, unde MAX_PATH este definită ca o constantă egală cu 260 - cu câteva excepții discutate mai jos. Calea locală constă din următoarea secvență: litera de unitate, colon, backslash, componente de nume, separate de backslash-uri. De exemplu, calea maximă pe discul D este D: \ unele căi de 256 caractere (și încă un caracter, până la 260, ocupă zero).

    De asemenea, Windows are funcții care vă permit să utilizați căi avansate de fișiere. Pentru astfel de căi, limita maximă a numelui este de 32.767 de caractere. Fiecare componentă din cale este limitată de o valoare care depinde de sistemul de fișiere - de obicei 255 de caractere. Căi similare sunt date (și interpretate) într-un mod special. Pentru a specifica o astfel de cale, trebuie să utilizați prefixul \\? \. de exemplu: \\? \ D: \ cale foarte lungă sau \\? \ UNC \ server \ cale foarte lungă.

    Aceste nume pot fi utilizate numai în funcțiile Unicode ale Windows. Acestea (numele) trebuie tratate cu prudență din două motive. În primul rând, programele obișnuite nu vor putea accesa fișiere și directoare ale căror nume depășesc limita tipică în MAX_PATH. În al doilea rând, UNCW-nume sunt trecute sistem de fișiere de bază „ca atare“, fără a trece prin normalizarea de obicei strat rute. De exemplu, / nu va fi înlocuit cu nume, \. (două puncte) și. (un punct) nu vor fi speciale și nu vor fi extinse în nume reale de directoare. De aceea, este posibil să se specifice numele de mai mult de 260 de caractere în calea (și numele numele sau consideră inacceptabile - de exemplu, cu un punct la final) - deoarece numele sunt trecute sistemul de fișiere fără tratament, astfel încât normalizarea stratului nu impune o limită de 260 de caractere (și alte reguli pentru numele fișierelor în Windows).

    namespace

    Pentru a explora spațiul de nume, puteți utiliza utilitarul WinObj din SysInternals.

    Spațiile spațiului de nume Win32

    Acestea sunt numele care încep cu \\? \ - le-am analizat deja mai sus.

    C: \ prefixele sunt aliasuri.

    Win32 Spaces Nume de dispozitiv

    Pentru a accesa dispozitivele în loc de fișierele fizice, este folosit spațiul de nume al dispozitivului. Pentru a specifica calea, se utilizează prefixul \\. \ (Două spate, un punct, un backslash). De exemplu, puteți accesa discul ca pe un dispozitiv fizic, fără a accesa sistemul de fișiere. Dar, desigur, "dispozitivele" nu se limitează doar la discuri.

    De exemplu, dacă doriți să deschideți numărul de port serial de comunicație 1, puteți utiliza numele COM1 în apelul funcției CreateFile. Aceasta funcționează deoarece COM1-COM9 face parte din numele rezervate din spațiul de nume NT. Aceasta funcționează ca un alias pentru dispozitiv, deși puteți specifica în mod explicit prefixul \\. \. Pentru comparație: în cazul în care dintr-o dată aveți o sută și COM-port și ar trebui să se refere la 56-COM-port, nu se poate deschide, în numele COM56 - pentru că nu există un alias predefinite sau de rezervă pentru el. Va trebui să îl deschideți cu numele \\. \ COM56.

    Namespace-uri NT

    Există, de asemenea, funcții API care vă permit să utilizați denumirea în stil NT, dar în majoritatea cazurilor acest lucru nu este necesar. Pentru cele mai populare obiecte, link-urile (aliasele) sunt create astfel încât să poată fi accesate folosind funcții standard. De exemplu, spațiul de nume NT include elemente precum Serial0 și Serial1. HarddiskVolume1 și Harddisk0. dar ei lucrează de obicei prin spațiul de nume al Win32 folosind nume precum C: și \\. \ PhysicalDrive0.

    După cum am menționat deja, alte spații de nume sunt implementate în partea de sus a spațiului de nume NT. De exemplu, pentru registry, elementul REGISTRY este creat la rădăcină. obiectele kernel sunt în KernelObjects. despre dispozitivele și fișierele Win32 Am spus deja că există și sesiuni și, de exemplu, numele global și local al obiectelor IPC și așa mai departe.

    În acest sens, închei povestea despre fișiere și trec la serializarea datelor.







    Trimiteți-le prietenilor: