问题描述:拷贝文件时不全
C:\Users\fzhu\AppData\Local\Temp\Crypto\CCM3511SR\from_uT\CCM3511\2016-04-26\DemoCOS-C\Eclipse-C0\eclipse-C0-18APR2016\features\org.eclipse.cdt.build.crossgcc_8.4.0.201406111759\META-INF\maven\org.eclipse.cdt.features\org.eclipse.cdt.build.crossgcc\pom.xml
CreateDirectory()函数的描述:There is a default string size limit for paths of MAX_PATH characters. This limit is related to how the CreateDirectory function parses paths. To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. For more information, see Naming a File.
MAX_PATH的解释: 文件名最长256(ANSI),加上盘符(X:\)3字节,259字节,再加上结束符1字节,共260
解决方案
1.使用GetShortPathName()获得短路径,再使用GetLongPathName()恢复
缺点:大部分的无规律的目录名无法缩短长度
例子:"Program Files"短路径为"progra~1"
例子:"Program Filess"短路径为"progra~2"
例子:"Programme Files"短路径为"progra~3"
例子:"C:\\ProgramData\\360zip"短路径"C:\PROGRA~2\360zip"
例子:C:\\Users\\fzhu\\AppData\\Local\\Temp\\Crypto\\1111111111111111111111111111111111111111111111111111111111111111111111111111\\2222222222222222222222222222222222222222222222222222222222222222222222222\\33333333333333333333333333333333333333333333333\\44444444\\meeeee.data"短路径为"C:\Users\fzhu\AppData\Local\Temp\Crypto\111111~1\222222~1\333333~1\44444444\MEEEEE~1.DAT"
2.使用Win32 命名空间
2.1 很多操作文件的Windows API都支持以”\\?\” 作为前缀的long path, 但仅仅是很多而不是全部.
2.2 对于文件I/O 操作来说,”\\?\”前缀,告诉win API 不要解析字符串,直接将之后的字符串传递给文件系统。比如,如果系统支持大路径和文件命名,使用此种方式来传递路径下去即可。因为它关闭了自动扩展,使用”\\?\”后,可以在路径名中使用”..”和”.”字符。但并不是所有的I/O API 支持”\\?\”,自行参考MSDN
3.直接使用根目录下 - 减少路径长度
参考资料
1. 文件位于比 MAX_PATH 字符更深的路径中
2. Naming Files, Paths, and Namespaces()
3. 8.3 路径,文件名,路径,命名空间,名称空间,最大文件长度,文件名,路径名