Bjarne Duelund's PC-INFO


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

Indholdet på "Bjarne Duelund's PC-Info" er © 1999-2006 Bjarne Duelund. Kopiering uden samtykke er forbudt efter ophavsretsloven.