Max Eskin wrote:
In Windows 95, the MS-DOS file system is used for
backwards compatibility,
but the engineers decided to implement long filenames. They do this by
using adjacent entries in the file allocation table for the same file. So,
while DOS sees 8 characters, and 3 in the extension, as usual, Windows 95
knows to check the following entries for the rest of the filename (this
means that less files can be stored in the root directory, BTW). But in
MS-DOS, you can't see the full filename, so Micros~1 decided to do
something else: they take the first six characters of the filename, append
a ~1. If the ~1 is taken, it appends a ~2 instead, and so on. So, if I
make a file called 'Microsoft Internet Files.doc' in Windows 95 and then
try to look at it in MS-DOS, it will simply say Micros~1.doc. Of course,
since MS-DOS isn't case-sensitive, it should really be MICROS~1.DOC.
I think a friend of mine helped write the Win95 filesystem code (though it
may have been NT). I'm sure he put a LOT of work in. Too bad the results
are so ungainly.
Correct me if I'm wrong... they need to store the DOS "short" file name,
followed by the Win95 "long" file name (possibly taking up several directory
entries).
Is it ONLY adjacency that ties the two names together? No wonder they can
be separated. When Win95 had just come out, I amused myself by running
the disk utilities that came with it. I got some very alarming error
messages, things like:
The following file may have lost its long filename:
C:\WINDOWS\SOL.EXE
If this is the correct long filename, click OK.
Otherwise, click Cancel:
c:\windows\system32\bubbles.bmp
I'm making it up, but not completely. I do remember SOL.EXE and BUBBLES.BMP
wre involved in one case. Then there's the problem of the disk utilities
*starting over again*, seemingly at random. The defragmentation program
would be happily scanning C: and then it would put up a notice ("I need to
start again") and then redo everything it had done until then. This could
happen a couple of times in a row.
I should also mention that the extra directory entires need to be hidden
from DOS. Get this. They are marked as *volume
labels*. There's only
supposed to be one, and obviously DOS ignored the others
instead of
complaining. (Before Windows, I mean.) This is especially shameful since
there are actually a couple of unused attribute bits that MS could
legitimately have used!
And is it true that the LFNs are stored in Unicode?
-- Derek