如何在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)

如何在WinRT中绕过MAX_PATH

。. NET不支持'?' file paths。您需要使用短文件名。

这很糟糕,但是有一个关于这个话题的MSKB: http://support.microsoft.com/kb/142982