Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
This comes up in an internal discussion about MAX_PATH limit. People do mention that the core file services supports syntax like [\\?\](file://\\?\) for path longer than MAX_PATH. The caveat is that file name with [\\?\](file://\\?\) is not canonicalized by the OS. This can lead to many funny behavior. One of our senior developer writes the following example to illustrate this problem.
C:\temp>md "\\?\c:\temp\bar."
C:\Temp>dir *bar*
Volume in drive C has no label.
Volume Serial Number is B0F1-CCDC
Directory of C:\Temp
02/18/2004 04:06 AM <DIR> bar.
0 File(s) 0 bytes
1 Dir(s) 6,810,882,048 bytes free
C:\Temp>rd bar.
The system cannot find the file specified.
c:\Temp\md bar
C:\Temp>dir *bar*
Volume in drive C has no label.
Volume Serial Number is B0F1-CCDC
Directory of C:\Temp
02/18/2004 04:08 AM <DIR> bar
02/18/2004 04:06 AM <DIR> bar.
0 File(s) 0 bytes
2 Dir(s) 6,810,882,048 bytes free
C:\Temp>echo foo > bar.\12346.txt
C:\Temp>dir/s/b 12346.txt
C:\Temp\bar\12346.txt
C:\Temp\bar.\12346.txt
C:\Temp>del /s 12346.txt
Deleted file - C:\Temp\bar\12346.txt
C:\Temp>echo foo > "\\?\c:\Temp\bar.\12347.txt"
C:\Temp>dir/s/b 12347.txt
File Not Found
C:\Temp>type "\\?\c:\Temp\bar.\12347.txt"
foo
Comments
- Anonymous
February 18, 2004
I don't know if this should be considered a bug or not, really, but can't change to a directory created this way using cmd.exe - it believes, thanks to the , that it's a UNC path, and so can't be the CWD.
Probably a good thing, really, but an interesting side-effect nonetheless. - Anonymous
February 18, 2004
yes because side effects are good in software. - Anonymous
February 18, 2004
As a general rule, no.
However, given that cmd.exe obviously doesn't have a clue how to handle such paths, it's probably a good thing that it has as little to do with them as possible. - Anonymous
February 20, 2004
This has nothing to do with UNC paths. ? prefix allows you to bypass win32 naming rules (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/naming_a_file.asp).
This is how you can create names such as "bar." (which is not a valid win32 directory name).