From MSDN’s “Naming a File or Directory,” here are the general conventions for what a legal file name is under Windows:
You may use any character in the current code page (Unicode/ANSI above 127), except:
<
>
:
"
/
\
|
?
*
- Characters whose integer representations are 0-31 (less than ASCII space)
- Any other character that the target file system does not allow (say, trailing periods or spaces)
- Any of the DOS names: CON, PRN, AUX, NUL, COM0, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT0, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9 (and avoid AUX.txt, etc)
- The file name is all periods
Some optional things to check:
- File paths (including the file name) may not have more than 260 characters (that don’t use the
\?\
prefix) - Unicode file paths (including the file name) with more than 32,000 characters when using
\?\
(note that prefix may expand directory components and cause it to overflow the 32,000 limit)