如何在WinRT中绕过MAX_PATH
本文关键字:MAX PATH WinRT | 更新日期: 2023-09-27 18:12:39
我希望能够在LocalCacheFolder
中创建文件和文件夹,而不必担心总路径长度将超过248个字符,这是目前我的应用程序中的一个问题。除了使我的应用程序生成更短的路径和避免嵌套之外,什么是处理这个问题的好方法?
附加上下文:
我发现WinRT应用程序容易受到MAX_PATH限制的影响。在我的应用程序中,当调用StorageFolder.CreateFileAsync
时,我得到一个System.IO.PathTooLongException
与消息:
"指定的路径、文件名或两者都太长。完全限定文件名必须小于260个字符,且目录名必须小于248个字符。"
当在Windows.Storage.ApplicationData.Current.LocalCacheFolder
中创建一些嵌套子文件夹时,这种情况经常发生,因为LocalCacheFolder实际上是C:'Data'Users'DefApps'APPDATA'Local'Packages'<my_package>'LocalCache'
,因此,在我自己的应用程序创建的文件夹/文件中允许的字符数量大大减少。
我试过了:
考虑到本文的背景,我尝试了以下操作,看看是否可以欺骗WinRT使用Win32文件名称空间,理论上这将为我提供最大长度为32,767个字符的Unicode路径:
var path = Windows.Storage.ApplicationData.Current.LocalCacheFolder.Path;
var cacheFolder = await StorageFolder.GetFolderFromPathAsync(@"''?'" + p);
这个尝试失败,有一个异常:The specified path is invalid. (Exception from HRESULT: 0x800700A1)
。
。. NET不支持'?' file paths。您需要使用短文件名。
这很糟糕,但是有一个关于这个话题的MSKB: http://support.microsoft.com/kb/142982