[VS10]目的是将驱动器文字字符串复制到* .dst中,因此
TCHAR *driveIDBase;
...
wcscpy_s (driveIDBase, MAX_PATH-3, L"\\\\?\\C:\\*");
这会产生错误
IntelliSense:没有重载函数“wcscpy_s”匹配的实例 参数列表
请注意,ANSI版本运行良好:
strcpy_s (driveIDBase, MAX_PATH-3, "C:\\*");
假设我们尝试了明显的解决方法:
strcpy_s(driveIDBase,MAX_PATH-3,“\\?\ C:\”);
我们可以调用强制转换(wchar_t *)driveIDBase 吗?也就是说,WIN32_FIND_DATAW会将该字符串解释为“C:\”?
这句引自MSDN的意思是什么?
“\\?\”前缀会关闭路径字符串的自动扩展,
答案 0 :(得分:0)
值得注意的是TCHAR的Stack Overflow定义:
char或wchar_t的#define,用于移植古代窗口 应用
正在组装的代码不是一个古老的端口,尽管将其包含在当前项目中的最初原因是,为了在某些API函数中进行转换,建议(在较旧的线程中)。
由于MBCS的逐步淘汰,如今Bo建议的那样,最近建立一个项目在Unicode中更为可取,这使得TCHAR宏的使用变得多余。
至于问题的第二部分,假设创建一个宽的char目录:
%USERPROFILE%\This Is A SubDirectory of %USERPROFILE% Not C-Colon-Backslash-Users-Backslash-MyUserName-- Being the Expanded Directory Path We Intended to Use
我们注意到在\\?\下,不会在" C:\ Users \ MyUserName"中创建给定的子目录。事实上,在大多数情况下,它不可能,因为C:\用户永远不会在第一个实例中使用\\?\前缀创建。
用另一个问题总结答案的这一部分:
关于MSDN中同一页面的另一个陈述:
最大路径为32,767个字符是近似值,因为 " \\ \&#34?;系统在运行时可以将前缀扩展为更长的字符串 时间,这种扩展适用于总长度,
是运行时的扩展不是自动的吗?