Wednesday, May 4, 2011

Short File Name (SFN) to Long File Name (LFN) Conversion

The text below is an excerpt from http://en.wikipedia.org/wiki/8.3_filename


Although there is no compulsory algorithm for creating the 8.3 name from an LFN, Windows uses the following convention:[4]
  1. If the LFN is 8.3 uppercase, no LFN will be stored on disk at all.
    • Example: "TEXTFILE.TXT"
  2. If the LFN is 8.3 mixed case, the LFN will store the mixed-case name, while the 8.3 name will be an uppercased version of it.
    • Example: "TextFile.Txt" becomes "TEXTFILE.TXT".
  3. If the filename contains characters not allowed in an 8.3 name (including space which was disallowed by convention though not by the APIs) or either part is too long, the name is stripped of invalid characters such as spaces and extra periods. Other characters such as "+" are changed to the underscore "_", and uppercased. The stripped name is then truncated to the first 6 letters of its basename, followed by a tilde, followed by a single digit, followed by a period ".", followed by the first 3 characters of the extension.
    • Example: "TextFile1.Mine.txt" becomes "TEXTFI~1.TXT" (or "TEXTFI~2.TXT", should "TEXTFI~1.TXT" already exist). "ver +1.2.text" becomes "VER_12~1.TEX".
  4. Beginning with Windows 2000, if at least 4 files or folders already exist with the same initial 6 characters in their short names, the stripped LFN is instead truncated to the first 2 letters of the basename (or 1 if the basename has only 1 letter), followed by 4 hexadecimal digits derived from an undocumented hash of the filename, followed by a tilde, followed by a single digit, followed by a period ".", followed by the first 3 characters of the extension.
    • Example: "TextFile.Mine.txt" becomes "TE021F~1.TXT".