Windows 9x LFN
af Bjarne Duelund
============================================================================== Filnavne i Windows 95 af Bjarne Duelund Nielsen Tidligere publiceret på Dansk FidoNet ============================================================================== Et normalt MS-DOS Directory entry med korte (8+3 tegn) filnavne er opbygget således: Hvert entry fylder 32 Bytes med følgende informationer: Byte 0- 7: Filnavnet første 8 tegn i ASCII Første Byte kan have følgende betydning: 00H Entry har aldrig været brugt 05H Første tegn er i virkeligheden E5H (õ) 2EH Dette er et Subdirectory (.), egentlig ugyldig E5H Filen er slettet 8-10: Filnavnets Extension 11 : Attribut, kan kombineres: 00H Normal fil 01H Read only 02H Hidden 04H System 08H Volume Label (labelnavn i de første 11 Bytes) 10H Subdirectory 20H Archive 40H Reserveret 80H Reserveret 12-21: Reserveret 22-23: Klokkeslet for oprettelse/sidste opdatering 16 bits i binær form |hhhhhmmmmmmsssss| 24-25: Dato for oprettelse/sidste opdatering 16 bits i binær form |yyyyyyymmmmddddd| År begynder med 1980 og kan have værdien 0-119 (1980-2099), måned 1-12 og dag 1-31. 26-27: Filens start cluster 28-31: Fil størrelse i Bytes Eksempel: 000000: 46 49 4C 45 4E 41 4D 45 - 45 58 54 20 00 00 00 00 FILENAMEEXT .... 000010: 00 00 68 24 00 00 91 A0 - 68 24 6D B7 22 00 00 00 ..h$..æ h$m·"... Filnavn : FILENAME.EXT Attribut : Archive Tid : 20:04.17 Dato : 8-03-1998 Cluster : 46957 Størrelse: 34 Bytes ----- For et Windows 95 langt filnavn gælder der, pga. ønsket om bagudkompatibilitet, at hver fil både har et kort (8+3) og et langt filnavn. Det korte filnavn og de yderligere informationer om filen (længde m.v.) gemmes i et almindeligt Directory entry som ovenfor beskrevet. Det lange filnavn gemmes i de UMIDDELBART FOREGÅENDE directory entry, der så markeres specielt så de ikke optræder som selvstændige filer og ikke er synlige under almindelig MS-DOS (ikke DOS-Box). Et langt filnavn (LFN) består af tegn i Unicode som hver optager 2 Bytes. Et directory entry for et langt filnavn har følgende opbygning: Byte 0 : Sequence Byte Bit 0-4 Sequence nummer (1-31) Bit 5 Reserveret Bit 6 Indikerer om det er sidste entry i filnavnet Bit 7 Reserveret 1-10: De første fem tegn i det lange filnavn 11 : Attribut, altid 0Fh dvs. følgende: Read only, Hidden, System, Volume label 12 : Reserveret til type indikator 13 : Checksum (for det korte filnavnsentry) 14-25: De næste seks tegn i filnavnet 26-27: Reserveret 28-31: Næste to tegn i filnavnet Eksempel: SFN: DETTEE~1.TXT LFN: DetteErEtLangtFilnavnTilTest.txt Her er det korte filnavnsentry med de tre FOREGÅENDE entries der indeholder det lange filnavn: 0000A0: 43 73 00 74 00 2E 00 74 - 00 78 00 0F 00 FD 74 00 Cs.t...t.x...ýt. 0000B0: 00 00 FF FF FF FF FF FF - FF FF 00 00 FF FF FF FF ................ 0000C0: 02 74 00 46 00 69 00 6C - 00 6E 00 0F 00 FD 61 00 .t.F.i.l.n...ýa. 0000D0: 76 00 6E 00 54 00 69 00 - 6C 00 00 00 54 00 65 00 v.n.T.i.l...T.e. 0000E0: 01 44 00 65 00 74 00 74 - 00 65 00 0F 00 FD 45 00 .D.e.t.t.e...ýE. 0000F0: 72 00 45 00 74 00 4C 00 - 61 00 00 00 6E 00 67 00 r.E.t.L.a...n.g. 000100: 44 45 54 54 45 45 7E 31 - 54 58 54 20 00 22 6F A8 DETTEE~1TXT ."o¨ 000110: 68 24 68 24 00 00 72 AA - 68 24 03 01 68 00 00 00 h$h$..rªh$...... Det ses at Byte 100-11F indeholder det korte filnavnsentry: Filnavn : DETTEE~1.TXT Attribut : Archive Tid : 21:19.18 Dato : 8-03-1998 Cluster : 259 Størrelse: 104 Bytes Byte 0E0-0FF indeholder de første 13 tegn (DetteErEtLang) i det lange filnavn, det ses at sekvens nummeret er 1 og at det ikke er sidste entry. Byte 0C0-0DF indeholder de næste 13 tegn (tFilnavnTilTe) i det lange filnavn, det ses at sekvensnummeret er 2 og at det ikke er sidste entry. Byte 0A0-0BF indeholder de sidste 6 tegn (st.txt) i det lange filnavn, det ses at sekvensnummeret er 3 og at det er sidste entry i dette LFN. ----- Når Windows 95 ser et kort filnavn, checker det om det foregående entry er et langt filnavnsentry. Er det tilfældet, checkes Sequence nummer og Checksum (Byte 13) for at sikre at det er det rette tilhørende LFN entry og ikke et entry der ved en fejl ikke er blevet slettet (f.eks. hvis man sletter en fil i DOS). Hvis det er det rigtige LFN entry følges bare yderligere LFN entries bagud med rigtig Checksum til man møder det sidste (Bit 6 = '1' i Byte 0), hvorved det lange filnavn sammensættes. 'Orphaned'/hjemløse LFN entries kan slettes med ScanDisk. Når man sletter en fil med et langt filnavn på f.eks. 50 tegn, frigøres 5 directory entries. Hvis man senere opretter en fil der behøver flere end 5 entries må filnavnet oprettes andet steds, da alle entries skal være efterfølgende/sammenhængende, ofte efter sidste entry. Derved opstår der fragmenter i Directory, hvilket kan fjernes med Windows 95 Defrag. Det er en god ide at man jævnligt kører Windows 95 Defrag, også selvom der meldes om kun få procent fragmentering, da Defrag ikke checker på fragmentering i Directory, når den i opstart vejleder om hvorvidt man bør fortsætte. ==============================================================================>TOP >HOME