Although each file system can have specific rules about the formation of individual components in a directory or filename, all file systems follow the same general conventions: a base filename and an optional extension, separated by a period. For example, the MS-DOS FAT file system supports 8 characters for the base filename and 3 characters for the extension. This is known as an 8.3 filename. The FAT file system and NTFS support filenames that can be up to 255 characters long. This is known as a long filename. To get an MS-DOS filename given a long filename, use the GetShortPathName function. To get the full path of a file, use the GetFullPathName function.
Both file systems use the backslash (\) character to separate directory names and the filename when forming a path.
General rules for applications creating names for directories and files or processing names supplied by the user include the following:
·Use any character in the current code page for a name, but do not use a path separator, a character in the range 0 through 31, or any character explicitly disallowed by the file system. A name can contain characters in the extended character set (128-255).
·Use the backslash (\), the forward slash (/), or both to separate components in a path. No other character is acceptable as a path separator.
·Use a period (.) as a directory component in a path to represent the current directory.
·Use two consecutive periods (..) as a directory component in a path to represent the parent of the current directory.
·Use a period (.) to separate the base filename from the extension in a directory name or filename.
·Do not use the following characters in directory names or filenames, because they are reserved for Windows:
< > : " / \ |
·Do not use device names, such as aux, con, and prn, as filenames or directory names.
·Process a path as a null-terminated string. The maximum length for a path, including a trailing backslash, is given by MAX_PATH.
The wide (Unicode) versions of the CreateDirectory, FindFirstFile, GetFileAttributes, and SetFileAttributes functions permit paths that exceed the MAX_PATH length if the path has the "\\?\" or "\\?\UNC\" prefix. These prefixes direct the functions to turn off path parsing. Use the "\\?\" prefix with paths for local storage devices and the "\\?\UNC\" prefix with paths having the Universal Naming Convention format.
·Do not assume case sensitivity. Consider names such as OSCAR, Oscar, and oscar to be the same.
By following the rules listed in this section, an application can create valid names for files and directories regardless of the file system in use.
Long Filenames on Windows NT
The operating system stores the long filenames on disk as special directory entries. When you create a long filename, the operating system creates a corresponding short 8.3 form of the name.
The operating system stores the long filenames on disk in Unicode. This means that the original long filename is always preserved, even if it contains extended characters, and regardless of the code page that is active during a disk read or write operation. The case of the filename is preserved, but the file system is not case-sensitive.
The valid character set for these long filenames is the NTFS character set, less one character: the colon (':') that NTFS uses for opening alternate file streams. This means that you can freely copy files between NTFS and FAT partitions without losing any file name information.