G.3 File Names on MS-Windows
MS-Windows and MS-DOS normally use a backslash, ‘ \
’, to
separate name units within a file name, instead of the slash used on
other systems. Emacs on MS-DOS/MS-Windows permits use of either slash or
backslash, and also knows about drive letters in file names.
On MS-DOS/MS-Windows, file names are case-insensitive, so Emacs by
default ignores letter-case in file names during completion. To this
end, the default value of read-file-name-completion-ignore-case
is non- nil
on MS-DOS/MS-Windows. See Completion Options.
The variable w32-get-true-file-attributes
controls whether
Emacs should issue additional system calls to determine more
accurately file attributes in primitives like file-attributes
and directory-files-and-attributes
. These additional calls are
needed to report correct file ownership, link counts and file types
for special files such as pipes. Without these system calls, file
ownership will be attributed to the current user, link counts will be
always reported as 1, and special files will be reported as regular
files.
If the value of this variable is local
(the default), Emacs
will issue these additional system calls only for files on local fixed
drives. Any other non- nil
value means do this even for
removable and remote volumes, where this could potentially slow down
Dired and other related features. The value of nil
means never
issue those system calls. Non- nil
values are more useful on
NTFS volumes, which support hard links and file security, than on FAT,
FAT32, and exFAT volumes.
Unlike Unix, MS-Windows file systems restrict the set of characters that can be used in a file name. The following characters are not allowed:
-
Shell redirection symbols ‘
<
’, ‘>
’, and ‘|
’. -
Colon ‘
:
’ (except after the drive letter). -
Forward slash ‘
/
’ and backslash ‘\
’ (except as directory separators). -
Wildcard characters ‘
*
’ and ‘?
’. -
Control characters whose codepoints are 1 through 31 decimal. In particular, newlines in file names are not allowed.
-
The null character, whose codepoint is zero (this limitation exists on Unix filesystems as well).
In addition, referencing any file whose name matches a DOS character
device, such as NUL
or LPT1
or PRN
or CON
,
with or without any file-name extension, will always resolve to those
character devices, in any directory. Therefore, only use such file
names when you want to use the corresponding character device.