8.3-as fájlnév
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.
Áttekintés
szerkesztésA 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]
- 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”
- 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”.
- 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.
- 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ésAz 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]
Könyvtárbejegyzés
szerkesztésA 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 A–Z
- Számjegyek 0–9
- 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 a–z
nagybetűkként A–Z 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:
| |||||||||||||||||||||||||||
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:
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:
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:
| |||||||||||||||||||||||||||
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ésNé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ésJegyzetek
szerkesztés- ↑ Naming a File. Microsoft Developer Network. [2008. október 15-i dátummal az eredetiből archiválva]. (Hozzáférés: 2012. július 3.)
- ↑ MSDN: How did wildcards work in MS-DOS? (a cikk és a hozzászólások)
- ↑ GetShortPathName Function. MSDN
- ↑ How To Get a Short Filename from a Long Filename. Microsoft
- ↑ How Windows Generates 8.3 File Names from Long File Names. Microsoft
- ↑ How to Disable the 8.3 Name Creation on NTFS Partitions. Microsoft
- ↑ Archivált másolat. [2012. február 22-i dátummal az eredetiből archiválva]. (Hozzáférés: 2012. július 3.)
- ↑ forrás: kernel 2.6.18 /fs/fat/dir.c és fs/vfat/namei.c
- ↑ http://www.die.net/doc/linux/man/man8/mount.8.html
Fordítás
szerkesztésEz 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.