Blog gunsmoker serialization - általános információk a fájlokról

Először is, emlékezzünk, mi a fájl. A fájl soros eléréssel rendelkező eszköz, amely név szerint érhető el. A leggyakoribb fájl a lemezen található fájl. De tágabb értelemben egy fájl is fájl eszköz - például hálózati kapcsolat, adatfolyam, csatorna, stb. Ennek megfelelően a lemezen lévő fájlok írásának vagy betöltésének mûködése szélesebb értelemben tekinthetõ meg minden fájlra vonatkozóan.

A külső eszközökön (lemezeken) tárolt fájlokat gyakran fizikai fájloknak nevezik. Az operációs rendszer fájlok elnevezési szabályai szerint összeállított nevek. Például a Windows esetében ez a következő:
  • myfile.txt
  • átnevezni
  • C: \ MyFile.txt
  • C: \ MyFolder \ MyFile.txt
  • .\ MyFile.txt
  • .\ .. \ MyFile.txt

    Fájlok elnevezése

    Minden fájlrendszer ugyanolyan általános rendszer elnevezésének egyes fájlok: base fájl nevét (myFile), valamint további fájl kiterjesztését (txt), ponttal elválasztva. Az alap fájlnevet és a fájlkiterjesztést a fájlnévnek nevezik. (Átnevezni). Azonban minden fájlrendszer (mint az NTFS, CDFS, exFAT, UDF, FAT és FAT32) lehet egyedi és eltérő szabályok kialakulásának egyes komponensek az utat a könyvtárat vagy fájlt. Felhívjuk figyelmét, hogy a könyvtár (más néven könyvtár), amelynek célja a fájlok kezelésére kategória, - ez egyszerűen egy fájl egy speciális tulajdonsága, hogy a védjegyek őt, mint egy könyvtár, hanem a többi könyvtárak követni mindegy elnevezési szabályok rendes fájlokat. Mivel a „könyvtár” egyszerűen egy speciális típusú fájlt, néhány referencia anyagok használatával az általános kifejezés a „fájl” fedezi egyrészt a katalógusban fogalmak és a koncepció az adatállomány, mint olyat. Emiatt, hacsak másként nem jelezzük, a könyvtárakra bármilyen név és használati szabály vagy példa is alkalmazható. A könyvtárat nem szabad összetéveszteni a mappával. A mappa általánosabb fogalom. Directory mindig fizikailag képviseli a lemezen, valamint a mappa lehet egy könyvtár, és képviseli a virtuális (logikai) helyen - például a mappát „Hálózati helyek” vagy a „Sajátgép”. A lemez legfelső szintű könyvtárát gyökérkönyvtárnak hívják. A gyökérkönyvtár mindig egyedi, de minden lemeznek megvannak a maga.

    Minden könyvtárban, kivéve a gyökérkönyvtárat, léteznek pszeudo-könyvtárak, amelyek speciális rezervált nevekkel rendelkeznek. (pont) és. (két pont). Könyvtárba. Ugyanaz a könyvtár is utal. - az előzőhöz (szülőkönyvtár, felső szintű könyvtár).

    Az „út” kifejezés egy vagy több könyvtárak (vagy mappák) jellel választjuk el (\ - backslash, fordított perjel, backslash), és esetleg a neve a mennyiség (C :), vagy a kiszolgáló nevét (\\ kiszolgáló \\? \ UNC \ kiszolgáló vagy \\? \ C :). Megjegyzés: a Windows néhány távol-keleti verziójában egy másik karaktert használnak az útlezáróhoz. de meg kell értenünk, hogy pontosan ugyanaz a szimbólum (azonos ANSI-kóddal), csak másnak tűnik.

    Összességében a Windows háromféle útvonalat használ:
    1. LFS (Local File System) - a helyi fájlrendszer nevét, például: C: \ MyFolder \ MyFile.txt
    2. UNC (Uniform Naming Convention) - hálózati UNC nevek, például: \\ server \ MyFolder \ MyFile.txt
    3. Hosszú UNC vagy UNCW - hosszú fájlneveket, például: \\ \ UNC \ server \ MyFolder \ átnevezni vagy \\ \ C: \ MyFolder \ átnevezni ??
    A fájl elérési útját a fájlnévvel együtt teljes fájlnévnek (C: \ MyFolder \ MyFile.txt) nevezik. A könyvtár minden könyvtárát, kötetének nevét és fájlját útösszetevőknek nevezzük.

    A lemezen lévő egyik könyvtár aktív a futó program számára. Ez az aktuális könyvtár. Az aktuális könyvtár mindig egy, a program indításakor beállított, és működés közben megváltoztatható (a könyvtárváltási függvény hívásával). Az aktuális könyvtár aktív, működőképes - a nevek feloldásakor használható (lásd alább). Az aktuális programkönyvtár mellett a rendszer külön figyeli az egyes lemezek aktuális könyvtárát. Az aktuális könyvtárban megadott meghajtót az aktuális lemeznek nevezik.

    Path, hogy kezdődik a neve a mennyiség (C: \ MyFolder \ átnevezni), a kiszolgáló nevét (\\ server \ MyFolder \ átnevezni) vagy a gyökér könyvtárban (\ MyFolder \ átnevezni) nevezzük abszolút -, mert ez a név mindig egyedi ugyanazt a fájlt jelöli, függetlenül a külső környezettől. Egyébként az út az úgynevezett relatív (mint átnevezni. \ Átnevezni. \ MyFolder \ átnevezni vagy. \ .. \ MyFolder \ átnevezni). A relatív útvonalakat az aktuális könyvtártól függően kezelik. Ezért ugyanaz a relatív útvonal hivatkozhat különböző fájlokra. . Például, az elérési utat és átnevezni \ átnevezni lásd a C: \ MyFolder \ átnevezni. ha az aktuális könyvtárban (vagy a könyvtárban, ahonnan jön a névfeloldás) a C: \ MyFolder \. de ugyanazok a nevek utalnak a D: \ Program Files \ MyFolder \ MyFile.txt fájlra. ha az aktuális könyvtár D: \ Program Files \ MyFolder \. Ne tévessze össze a teljes fájlnevet abszolút értékkel. Ezek kissé eltérő fogalmak, bár gyakran szinonimaként tekintik őket. A teljes fájlnév a fájl neve az elérési úttal, az a név, amellyel a fájl megtalálható. De nem feltétlenül abszolút. Másrészt minden abszolút név mindig teljes név. Az angol, a „teljesen minősített elérési út” ( „teljesen megadott útvonal”) - szinonim az abszolút elérési utat.

    A karakterek számának korlátozása is eltérő lehet, és attól függően változhat, hogy a fájlrendszer és a fájl neve van-e. Ezt tovább bonyolítja a visszafelé kompatibilitás. Például a régi MS-DOS fájlrendszerek legfeljebb 8 karaktert támogatnak az alapfájl nevéhez és a bővítés 3 szimbólumához - összesen 12 karaktert, beleértve a szeparációs pontot is. Emellett ezek a nevek nem tartalmazhat sok szimbólumot - például egy szóközt. Ez a fájlnév formátuma általában "8.3 fájlformátumnak" vagy rövid fájlnévnek nevezik. A Windows fájlrendszerek nem rendelkeznek ilyen korlátozással, és bár támogatják a 8.3 formátumú neveket a hátrafelhasználók kompatibilitásához, többnyire hosszú fájlnevekkel dolgoznak.

    Nevezési egyezmények

    A következő alapszabályok lehetővé teszik az alkalmazások számára, hogy a fájloktól és könyvtáraktól függetlenül létrehozzák és feldolgozzák az érvényes neveket:
    • Egy pont használatával elválaszthatja az alapfájl nevét a kiterjesztésből a fájlban vagy a könyvtárban. A könyvtárak kiterjesztéssel rendelkezhetnek, bár általában nem használják.
    • Használja a hátsó sávot (\) az útösszetevők elválasztásához. A visszalövés elválasztja a fájlnevet az elérési utatól, és egy könyvtár nevét az út másik könyvtárából. A rejtjelzőt nem használhatja a valódi fájl vagy könyvtár nevének részeként, mivel ez egy fenntartott karakter, amely a teljes fájlnevet részekre osztja.
    • A kötetnév részeként használhatja a kötetszámot, például a C: \ -ban C: \ elérési \ fájlban vagy a \\ szerver \ megosztásban a \\ kiszolgáló \ megosztás \ elérési \ fájlban.
    • A fájlnevek érzékenyek a kis- és nagybetűkre. Például az OSCAR nevek. Oscar és Oscar mind ugyanazon fájlra utalnak. Megjegyzés: A POSIX szabványnak megfelelő kompatibilitással engedélyezheti a fájlérzékelés esetén a fájlok esetében a címérzékenységet, de ez nem szabványos viselkedés, és általános forgatókönyvekben nem ajánlott.
    • A kötetnevek (meghajtóbetűjelek) szintén nem érzékenyek a kis- és nagybetűkre Például: D: és d: ugyanazt a kötetet jelenti.
    • A fájlnév bármelyik karakterét használhatja, beleértve a Unicode karaktereket is, az alábbi speciális karakterek kivételével:
      • <(меньше)
      • > (több)
      • : (vastagbél)
      • "(kettős idézetek)
      • / (perjel, perjel)
      • \ (backslash, backslash)
      • | | (függőleges vonal, cső)
      • ? (kérdőjel)
      • * (csillag)
      • Zéró (NUL karakter)
      • Olyan szimbólumok, amelyek kódja 1 és 31 között van (kivéve az alternatív adatfolyamokat, ahol ezek a karakterek megengedettek)
      • Minden olyan karakter, amely nem támogatja az alapjául szolgáló fájlrendszert
    • Használja például a pontot mint pályaösszetevőt, például az aktuális könyvtárat. \ Temp.txt.
    • Használjon két egymást követő pontot (.). \ Temp.txt.
    • A fájlnevekhez ne használja a következő, fenntartott eszközneveket: CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, # 8203; # 8203; COM5, COM6, COM7, COM8, COM9, LPT1, LPT2 LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 és LPT9. Emelje ki ezeket a neveket az alapvető fájlnevekben is - például a NUL.txt fájlban.
    • Ne felejtse el a fájlt vagy a könyvtár nevét egy periódussal. Bár az alapjául szolgáló fájlrendszer támogatja ezeket a neveket, a Windows shell, a felhasználói felület és az alkalmazások - nem. Lehetőség van például a fájlnév első karakterének meghatározására. temp.

    Az útvonal a megadott fájlt, amely egy vagy több komponens elválasztva egy speciális szimbólum (backslash), minden egyes komponens általában egy könyvtárban a fájlnév, de vannak bizonyos eltérések az alábbiakban tárgyaljuk. Nagyon gyakran a rendszerben a pálya értelmezésének döntő fontossága van az út kezdetének - az úgynevezett útvonal előtagnak. Ez az előtag határozza meg az ezen az útvonalon használható névteret, továbbá milyen speciális karaktereket használhat az útvonalon - beleértve az utolsó karaktert is.

    Ha az elérési út összetevője egy fájlnév, akkor az utóbbi az utóbbi összetevőnek kell lennie.

    Mindegyik elérési összetevőnek a név maximális hossza is van, az adott fájlrendszertől függően. Leggyakrabban ezek a korlátozások két fő csoportra korlátozódnak: rövid és hosszú fájlnevek. Vegye figyelembe, hogy a fájlnevek a fájlrendszerben speciális fájltípusként vannak tárolva, így a fájlnevezési szabályok a könyvtárnevekre is vonatkoznak. Összefoglalva: az elérési út egyszerűen a hierarchia sztring ábrázolása az adott fájlhoz vagy könyvtárhoz tartozó összes könyvtár között.

    Abszolút és relatív utak

    A fájlokkal működő függvények esetében a fájlnév az aktuális könyvtárhoz (vagy más, kifejezetten megadott könyvtárhoz) képest vagy teljes egészében megadható. Az aktuális könyvtárhoz tartozó fájlnév, ha nem az alábbiak egyikével kezdődik:
    • Minden formátum UNC-neve, amely mindig két hátsó sávval kezdődik (\\).
    • A meghajtó megnevezése egy visszalépéssel, például: C: \ vagy D: \.
    • A gyökérkönyvtárat - például a \ mappát vagy a \ file.txt - egy ellentétes sávot.
    Ha csak a fájl neve kezdődik a kijelölése a lemez, de nem törtvonalakat a kettőspont után, úgy értelmezi a relatív útvonal - relatív az aktuális könyvtárat a meghajtót. Például:
    • C: A tmp.txt a C. meghajtó aktuális könyvtárában található tmp.txt nevű fájlra utal.
    • C: A Temp \ tmp.txt a C meghajtó aktuális könyvtárának Temp almappájában található tmp.txt fájlra utal.
    Néha az útvonalat relatívnak is nevezik, ha egy könyvtárat tartalmaz. mint egyik alkotóelemét. Például:
    • . A \ tmp.txt egy tmp.txt nevű fájlra mutat. amely az aktuális könyvtár szülőkönyvtárában található.
    • . A \ .. \ tmp.txt olyan fájlra mutat, amely két könyvtárat tartalmaz az aktuális könyvtár fölött.
    • . A \ Temp \ tmp.txt egy tmp.txt nevű fájlra mutat. a Temp könyvtárban található. amely viszont az aktuális könyvtár szülőkönyvtárában található.
    • A C. \ Temp \ tmp.txt egy tmp.txt nevű fájlra mutat. a Temp könyvtárban található. amely viszont a C. meghajtó aktuális könyvtárának szülőkönyvtárában található.
    • C: \ Temp \ .. \ Temp \ tmp.txt és C :. \ Temp \ \ tmp.txt - e két pálya hivatkoznak a C: \ Temp \ tmp.txt. Bár senki nem fogja megkérdezni az utat ebben a formában, de az ilyen utakat lehet beszerezni ragasztás után a teljes útvonalát több összetevő különböző forrásokból. Bár az út az ilyen jellegű abszolút (nem rokon) abban az értelemben, az eredeti definíció, néha még mindig emlegetik relatív, kiemelve a jelenléte az alkatrész. módon.

    Maximális úthosszkorlátozás

    A Windows, a maximális úthossz egyenlő MAX_PATH karakter MAX_PATH amely a meghatározás szerint állandó egyenlő 260 - néhány kivételtől eltekintve az alábbiakban tárgyaljuk. Helyi útvonal áll a következő sorrendben: betűjelet, vastagbél-, vissza-per, a neve alkatrészek, szeparált hátsó osztásjelet. Például a legnagyobb utat a D meghajtón a formája D: \ valami 256 karakter irányú (és egy másik szimbólum, 260, vesz lezáró nulla).

    A Windows olyan funkciókat is tartalmaz, amelyek lehetővé teszik a speciális fájlok használatát. Az ilyen útvonalak esetében a maximális névkorlátozás 32.767 karakter. Az ösvény minden összetevőjét a fájlrendszertől függő érték - általában 255 karakter - korlátozza. Hasonló utakat adnak (és értelmeznek) különös módon. Az ilyen útvonal meghatározásához a \\? \ Előtagot kell használni. például: \\? \ D: \ nagyon hosszú útvonal vagy \\? \ UNC \ szerver \ nagyon hosszú útvonal.

    Ezek a nevek csak akkor használható a Windows Unicode-funkciókat. Számukra (nevek) kell óvatosan kell kezelni, két okból. Először is, a normál programok nem férhet, hogy a fájlok és könyvtárak neveit, amelyek meghaladják a tipikus határát MAX_PATH. Másodszor, UNCW nevek kerülnek átadásra szolgáló fájlrendszer „ahogy van”, anélkül, hogy a szokásos útvonalakon réteg normalizálása. Például a / nem fogok helyébe \ neveket. (Két pont). (Egy pont), nem lesz különleges, és nem bontakozik ki az igazi könyvtár nevét. Ezért lehetséges, hogy adja meg a nevét több mint 260 karakter az út (és a nevét a nevét, vagy elfogadhatatlannak tartja - például, egy ponttal a végén) - mivel a neveket át a fájlrendszer kezelés nélkül, úgy, hogy a normalizáció a réteg nem szab határt 260 karakter (és más szabályok Windows file nevek).

    névterek

    A névtér megismeréséhez használhatja a SysInternals WinObj segédprogramját.

    Win32 névtér helyek

    Ezek a nevek, amelyek a \\? \ - vel kezdődnek, már elemeztük őket.

    A C: \ előtagok aliasok.

    Win32 Device Name Spaces

    A fizikai fájlok helyett az eszközök eléréséhez az eszköz névterét használja. Az útvonal meghatározásához az \\. \ Előtagot (két visszalövés, egy pont, egy hátsó sáv) használják. Például hozzáférhet a lemezhez fizikai eszközként, anélkül, hogy elérné a fájlrendszert. Természetesen az "eszközök" nem korlátozódnak csak a lemezekre.

    Például, ha azt szeretnénk, hogy megnyitja a soros kommunikációs port számát 1, akkor a COM1 hívó nevét CreateFile funkciót. Ez azért működik, mert a COM1-COM9 része a fenntartott nevek a névtérben NT. Úgy működik, mint egy álnév a készüléket, és bár akkor egyértelműen meg kell határozni az előtag \\. \. Összehasonlításképpen: ha hirtelen van egy száz és a COM-portot és akkor olvassa el a 56-ik COM-port, akkor nem lehet megnyitni nevében a COM56 -, mert nincs előre meghatározott alias vagy hát neki. Meg kell nyitni a neve \\. \ COM56.

    NT névterek

    Vannak olyan API-funkciók, amelyek lehetővé teszik az NT-stílusban történő elnevezéseket, de a legtöbb esetben ez nem szükséges. A legnépszerűbb objektumoknál a hivatkozások (aliasok) úgy jönnek létre, hogy azok normál függvényekkel érhetők el. Például az NT névtér olyan dolgokat tartalmaz, mint a Serial0 és a Serial1. HarddiskVolume1 és Harddisk0. de általában a Win32 névtéren keresztül használják a C: és \\. \ PhysicalDrive0 neveket.

    Amint már említettük, más névterek is megvalósulnak az NT névtér tetején. Például a rendszerleíró adatbázisban a REGISTRY elem a gyökéren kerül létrehozásra. a kernel objektumok a KernelObjects-ben vannak. a Win32 eszközökről és fájlokról már elmondtam, vannak olyan munkamenetek is, és mondjuk az IPC objektumok globális és helyi nevei, és így tovább.

    Ezzel lezárjuk a fájlokról szóló történetet, és továbblépünk az adatok valóságos sorszámozására.