给定一个Unicode文件名,我遇到了用于打开文件的ac库.在打开文件之前,它首先通过前缀"\\?\"将文件名转换为路径.根据这篇msdn文章,除了增加路径中允许的最大字符数之外,还有什么理由可以做到这一点吗?
看起来这些"\\?\"路径需要Windows API和标准库的Unicode版本.
是的,这只是为了这个目的.但是,如果您决定创建超过MAX_PATH长度的路径,则可能会看到兼容性问题.例如,资源管理器shell和命令提示符(至少在XP上,我不知道Vista)无法处理该长度的路径并将返回错误.
此方法的最佳用途可能不是创建新文件,而是管理其他人可能创建的现有文件.
我管理了一个文件服务器,通常会获取文件path_length > MAX_PATH
.你看,用户看到的文件是H:\myfile.txt
,但实际上是在服务器上H:\users\username\myfile.txt
.因此,如果用户在MAX_PATH
服务器上创建了具有完全字符的文件,那么它就是MAX_PATH+len("users\username")
.
(创建具有MAX_PATH字符的文件并不罕见,因为当您在Internet Explorer上保存网页时,它使用页面标题作为文件名,对于某些页面来说可能相当长).
此外,通过Mac或Linux机器共享驱动器(通过网络或USB),您可以找到名称为con,prn或lpt1的文件.同样,前缀允许您和您的脚本处理这些文件.