Ugrás a tartalomhoz

8.3-as fájlnév

Ellenőrzött
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 miniszámítógépes operációs rendszerek alatt is.

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]

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, mint „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]

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 attribú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]
  1. "Naming a File". Microsoft Developer Network. 2008. október 15. dátummal az eredeti címről archiválva. Hozzáférés: 2012. július 3.
  2. MSDN: How did wildcards work in MS-DOS? (a cikk és a hozzászólások)
  3. "GetShortPathName Function". MSDN.
  4. "How To Get a Short Filename from a Long Filename". Microsoft.
  5. "How Windows Generates 8.3 File Names from Long File Names". Microsoft.
  6. "How to Disable the 8.3 Name Creation on NTFS Partitions". Microsoft.
  7. "Archivált másolat". 2012. február 22. dátummal az eredeti címről archiválva. Hozzáférés: 2012. július 3.
  8. forrás: kernel 2.6.18 /fs/fat/dir.c és fs/vfat/namei.c
  9. http://www.die.net/doc/linux/man/man8/mount.8.html

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. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.