8.3-as fájlnév

A Wikipédiából, a szabad enciklopédiából

A 8.3-as fájlnév[1] vagy rövid fájlnév (angolul short filename vagy SFN) a Microsoft Windows régi, Windows 95-öt, illetve Windows NT 3.51-et megelőző verzióiban és a DOS alatt használt fájlnév-konvenció. Az elavult programokkal való visszamenőleges kompatibilitás miatt a Microsoft modern operációs rendszereiben is használják, a hosszú fájlnevek alternatív rövid párjaként. A névhosszúság-korlátozás tükröződik a FAT fájlrendszer kialakításában is. Hasonló 8.3-as fájlnévsémák léteztek nem csak a modellül szolgáló korábbi CP/M, de az Atari, és egyes Data General és Digital Equipment Corporation minikomputeres operációs rendszerek alatt is.

Áttekintés[szerkesztés | forrásszöveg szerkesztése]

A 8.3-as fájlnevek legfeljebb nyolc karakteres alapnévből, és az ezt követő opcionális pontból ) „.” és a legfeljebb három karakteres kiterjesztésből állnak. A kiterjesztés nélküli fájlok esetében a záró pontnak nincs jelentősége (tehát a „myfile” és a „myfile.” ekvivalensek). Joker karakterek használatánál a fájlnév belső reprezentációja a pont elhagyásával egymás mögé írt 11 karakter, ahol a fájlnév 8, illetve a kiterjesztés 3 karakterét szükség szerint szóközökkel egészítik ki (tehát ABCD.TXT-ből ABCD····TXT lesz).[2] A fájl- és könyvtárnevek nagybetűsek, bár a 8.3-as fájlneveket használó rendszerek általában amúgy sem különböztetik meg a kis- és nagybetűket.

A FAT fájlrendszer egy változatában, a Windows 95-ben és Windows NT 3.5-ben bevezetett, kiterjesztett könyvtárstruktúrával rendelkező VFAT-ban, jelentek meg a kis- és nagybetűt is kezelő, Unicode (UTF-16) fájlnevek a klasszikus 8.3-as nevek mellett. Az elavult, DOS-os vagy 16 bites windowsos programokkal való visszamenőleges kompatibilitás miatt minden hosszú fájlnévhez automatikusan létrehozásra kerül egy 8.3-as fájlnév, amivel a régi programok továbbra is képesek megnyitni, átnevezni, letörölni stb. a fájlt. A 8.3-as fájlnév a GetShortPathName Kernel32.dll-függvénnyel kérdezhető le.[3][4]

Bár nincs kötelezően alkalmazandó algoritmus a hosszú fájlnévből a rövid név megalkotására, a Windows az alábbi konvenciót követi:[5]

  1. Ha a hosszú fájlnév csupa nagybetűs vagy csupa kisbetűs és 8.3 karakter hosszú (tehát megfelel a rövid fájlnév specifikációjának), akkor nem kerül a lemezen külön eltárolásra, csak a rövid fájlnév tárolódik.
    • Példa: „TEXTFILE.TXT”, „textfile.txt”
  2. Ha a hosszú fájlnév 8.3 karakter hosszú, de tartalmaz kis- és nagybetűket is, a hosszú fájlnév a vegyes nevet fogja tartalmazni, a 8.3-as pedig a csupa nagybetűs változatát.
    • Például: „TextFile.Txt” rövid neve: „TEXTFILE.TXT”.
  3. Ha a fájlnévben a 8.3-as névben nem megengedett karakterek vannak (köztük a szóköz, amit az API-k nem tiltanak, csak a konvenció) vagy bármelyik része túl hosszú, a név érvénytelen karakterei, mint a szóközök és extra pontok kihúzásra kerülnek. Más karakterek, mint a pluszjel („+”) aláhúzásjelre „_” változnak. A megrövidített név első 6 betűje kerül eltárolásra, ezután egy tilde („~”) következik, majd egy egyjegyű szám, egy pont „.”, és a kiterjesztés első 3 karaktere. A végeredmény csupa nagybetűvel kerül tárolásra. Windows 95/98/ME alatt a helyi kódlap (OEM kódtábla) karakterei is szerepelhetnek a rövid névben, például az „LLLáóú.Txt” rövid neve: „LLLáóú.TXT” a Windows 98 VFAT drivere alatt, de „LLL~1.TXT” a Windows XP alatt.
    • Példa: „TextFile1.Mine.txt” rövid neve „TEXTFI~1.TXT” (vagy „TEXTFI~2.TXT”, ha az előző már létezne a könyvtárban). A „ver +1.2.text” rövid neve „VER_12~1.TEX” lesz.
  4. A Windows 2000-rel kezdve ha legalább 4 olyan fájl vagy könyvtár létezik egy adott könyvtárban, melyek rövid nevének első 6 karaktere megegyezik, kissé más módszerrel áll elő a rövid fájlnév: az érvénytelen karakterektől megfosztott bázisnév első 6 helyett az első 2 karaktert veszi csak figyelembe (0-t vagy 1-et, ha 0 vagy 1 érvényes karakter marad), amit a tilde előtti további 4 karakter követ. Ez a 4 karakter a fájlnévből képezett dokumentálatlan hash függvény hexadecimális értékéből adódik. A rövid fájlnév többi része a szokott módon képződik. Akkor is a hashelt módszer lép életbe, ha a kiindulási fájlnév háromnál kevesebb érvényes karaktert tartalmaz.
    • Példa: „TextFile.Mine.txt” rövid neve „TE021F~1.TXT”.
    • Példa: „ő.txt” rövid neve „3D36~1.TXT”.

Ha a „2 eredeti karakter +4 karakter hash + a tilde után 1 karakternyi sorszám” séma kifogy a lehetőségekből, következik a „2 eredeti karakter +3 karakter hash + a tilde után 2 karakternyi sorszám” séma, a „2 eredeti karakter +2 karakter hash + a tilde után 3 karakternyi sorszám” séma, a „2 eredeti karakter +1 karakter hash + a tilde után 4 karakternyi sorszám” séma, a „2 eredeti karakter + a tilde után 5 karakternyi sorszám” séma, végül az „1 eredeti karakter + a tilde után 6 karakternyi sorszám” séma (100 000-től indulva, 999 998-ig). Ezután a fájllétrehozási kérelem „A kért műveletet a fájlrendszer egy korlátozása miatt nem lehetett végrehajtani” hibaüzenetet generál (2,14 millió fájl körül). A Windows NT-családban bevezetett NTFS fájlrendszer natívan hosszú fájlneveket tárol, de 8.3-as fájlnevek itt is létrejönnek az elavult alkalmazások számára. Ez opcionálisan kikapcsolható, ami megnöveli a fájlrendszer teljesítményét az olyan esetekben, amikor nagy számú, hasonló nevű fájlt kell létrehozni ugyanabban a könyvtárban.[6]

A kompaktlemezeken elterjedt ISO 9660 fájlrendszer legegyszerűbb, Level 1-es változatának a 8.3-as fájlnevekhez hasonló korlátozásai vannak, azzal az eltéréssel, hogy a könyvtárneveknek nem lehet kiterjesztésük és egyes karakterek (köztük a kötőjel) nem szerepelhetnek a fájlnevekben. A Level 2 a Mac OS-szel való kompatibilitás miatt 31 karakteres fájlneveket is megenged. Az OS/2 a kiterjesztett attribútumok (Extended Attributes, EA) segítségével valósította meg a hosszú fájlnevek támogatását, még a VFAT megjelenése előtt; így a VFAT hosszú fájlneveit az OS/2 nem képes értelmezni, sem az EA hosszú fájlneveket a Windows.

A Microsoft elleni antitrösztperek során viccesen MICROS~1 és MICROS~2 néven emlegették a Microsoft tervezett felosztása után majdan létrejövő cégeket.[7]

Kompatibilitás[szerkesztés | forrásszöveg szerkesztése]

Az elavult 8.3-as fájlneveket számos eszközben használják kváziszabványként adatcserére, például a fényképezőgépek CompactFlash kártyáiban. A Windows 95-szériában a VFAT-tal bevezetett hosszú fájlnevek megőrizték a kompatibilitást; az NT-alapú (NT/2K/XP/Vista/Win7) rendszerek VFAT-ja azonban kissé eltérő módon képezi a rövid fájlneveket.

Ha a fájlnév kizárólag kisbetűket tartalmaz, vagy egy kisbetűs alapnévből és nagybetűs kiterjesztésből áll, vagy fordítva; nincsenek benne speciális karakterek, és belefér a 8.3-as hosszúságlimitbe, a Windows NT-alapú operációs rendszerekben nem jön létre VFAT hosszú fájlneves könyvtárbejegyzés. Ehelyett a könyvtárbejegyzés 0x0c bájtjának két bitjét használják arra, hogy a fájlnév teljes vagy részleges kisbetűs írásmódját jelöljék. Részletesebben, a 4. bit a kisbetűs kiterjesztést, a 3. bit a kisbetűs alapnevet jelöli. Ez lehetővé tesz olyan kombinációk lejegyzését, mitn „example.TXT” vagy „HELLO.txt”, de például a „Vegyes.txt” leírásához már hosszúfájlnév-bejegyzés szükséges. Ezt a megoldást kevés más operációs rendszer támogatja. Ez némi kompatibilitási problémát okoz a régebbi Windows-verziókkal (95, 98, ME), melyek hosszúfájlnév-bejegyzés hiányában csupa nagybetűsnek tekintik a fájlnevet, így például egy pendrájvon átadott fájl neve megváltozhat. A Linux 2.6.x verziói képesek voltak kezelni ezt a kiterjesztést[8]; a „shortname” mount opció határozza meg, hogy a kötetre íráskor használja-e a Linux ezt a funkciót.[9]

Könyvtárbejegyzés[szerkesztés | forrásszöveg szerkesztése]

A könyvtárbejegyzés (directory table) egy könyvtárat megtestesítő speciális fájl. A könyvtárbejegyzésen belül minden, a könyvtárban található fájlhoz vagy alkönyvtárhoz egy-egy 32 bájtos bejegyzés tartozik. A bejegyzések tárolják a fájl alapnevét, kiterjesztését, attribútumait (archív, könyvtár, rejtett, csak olvasható, rendszer, illetve kötet), a létrehozás dátumát és idejét, a fájl vagy könyvtár első helyfoglalási egységének címét, végül méretét.

A DOS fájlnevekben használható karakterek közé tartoznak::

  • Az ábécé nagybetűi AZ
  • Számjegyek 09
  • Szóköz (bár az alapnév vagy a kiterjesztés végén található szóközöket csak helykitöltőnek tekinti, nem a fájlnév részének; továbbá a szóközöket tartalmazó fájlneveket nem lehet DOS parancssorból elérni, megfelelő escaping rendszer hiányában)
  • ! # $ % & ' ( ) - @ ^ _ ` { } ~
  • A 128–255 közti kódok

Ez a következő ASCII karaktereket zárja ki:

  • " * / : < > ? \ [ ] |
    Windows/MS-DOS alatt nincs shell escape character
  • A kisbetűket az
    nagybetűkként AZ tárolja FAT12/FAT16 alatt
  • Vezérlőkarakterek 0–31
  • 127-es kód (DEL)

Ha a fájlnév első bájtjaként 0xE5 szerepel, az gondot okozhat a cirill betűs KOI8 kódolás használatakor mivel a cirill „Е” nagybetűnek felel meg. Egyes operációs rendszerek, mint az ANDOS ezért automatikusan lecserélték a hasonló rajzolatú latin betűre.

A DOS fájlnevek OEM karakterkészlettel tárolódnak.

A könyvtárbejegyzések formátuma a gyökérkönyvtártól kezdve a következő:

Bájt címe Hossz Leírás
0x00 8 DOS fájlnév (szóközökkel kitöltve)

Az első bájtnak a következő speciális értékei lehetnek:

0x00 A bejegyzés szabad, és egyetlen további bejegyzés sincs használatban
0x05 A kezdőkarakter valójában 0xE5
0x2E 'Pont' bejegyzés; '.' vagy '..'
0xE5 A bejegyzés korábban ki lett törölve, már nem elérhető. Az undelete (törlést visszaállító) eszközöknek ki kell cserélniük ezt a karaktert egy normál karakterre a visszaállítás során.
0x08 3 DOS fájlkiterjesztés (szóközökkel kitöltve)
0x0b 1 Fájlattribútumok

Az első bájt a következő speciális értékeket veheti fel:

Bit Maszk Leírás
0 0x01 Csak olvasható
1 0x02 Rejtett
2 0x04 Rendszer
3 0x08 Kötetcímke
4 0x10 Alkönyvtár
5 0x20 Archív
6 0x40 Eszköz (belső használatra, lemezen nem található)
7 0x80 Nem használt

A 0x0F érték hosszú fájlnevet jelöl.

0x0c 1 Fenntartott; a két bitet az NT-alapú operációs rendszerek a kis- és nagybetűk megkülönböztetésére használják
0x0d 1 Létrehozási idő, finom felbontásban: 10 ms egységekben, értéke 0–199.
0x0e 2 Létrehozási idő. Az órát, percet és másodpercet a következő bitmap kódolja:
Bitek Leírás
15-11 Órák (0-23)
10-5 Percek (0-59)
4-0 Másodpercek/2 (0-29)

Megjegyzendő, hogy a „másodpercek” mező valójában csak 2 másodperc pontossággal tárolja az értéket. 0x0d-nél található a pontosabb érték.

0x10 2 Létrehozás dátuma. Az évet, hónapot és napot a következő bitmap kódolja:
Bitek Leírás
15-9 Év (0 = 1980, 127 = 2107)
8-5 Hónap (1 = január, 12 = december)
4-0 Nap (1 - 31)
0x12 2 Az utolsó hozzáférés dátuma, lásd a 0x10-et a leíráshoz.
0x14 2 EA-Index (kiterjesztett attríbútumok, OS/2 és NT) FAT12 és FAT16, FAT32-n az első foglalási egység számának a felső két bájtja
0x16 2 Az utolsó módosítás dátuma, lásd a 0x0e-et a leíráshoz.
0x18 2 Az utolsó módosítás dátuma, lásd a 0x10-et a leíráshoz.
0x1a 2 Az első foglalási egység FAT12 és FAT16 esetében. Az első foglalási egység számának alsó két bájtja FAT32-n.
0x1c 4 Fájlméret

Hosszú fájlnév konvertálása rövid fájlnévre[szerkesztés | forrásszöveg szerkesztése]

Néhány (nem általánosan igaz) ökölszabály a hosszú fájlnévből a rövid fájlnév megállapítására.

1. A rövid fájlnév legfeljebb 8 karaktert tartalmazhat a pont előtt. Ha több lenne, az első 6 karakter leírása után egy tilde (~) következik, majd egy szám (1-gyel kezdődően) a 8. karakterként. A szám különbözteti meg az első hat karakterben és kiterjesztésben megegyező nevű fájlokat.

2. Általánosan:

  • A fájlnevekben található szóközök és nem ASCII karakterek konvertáláskor eldobásra kerülnek
  • Az utolsó ponton kívül az összes eldobásra kerül.
  • A vesszők, szögletes zárójelek aláhúzásra cserélődnek.
  • A kis- és nagybetűk egyformán kezelődnek.

Egy könyvtár rövid fájlneveinek kilistázása:

A dir /x a hosszú nevekkel együtt a rövid neveket is listázza (ha utóbbiak léteznek)

A dir /-n kizárólag a rövid fájlneveket listázza, az eredeti DIR listázási formátumban.

Kapcsolódó szócikkek[szerkesztés | forrásszöveg szerkesztése]

Jegyzetek[szerkesztés | forrásszöveg szerkesztése]

Fordítás[szerkesztés | forrásszöveg szerkesztése]

Ez a szócikk részben vagy egészben a 8.3 filename című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel.