如何在WinRT中绕过MAX_PATH?

时间:2014-07-14 00:32:57

标签: c# windows-runtime windows-phone windows-store-apps max-path

我希望能够在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\,因此,我自己的应用程序创建的文件夹/文件中允许的字符数是大大减少了。

我尝试了什么:

鉴于this article中的背景,我尝试了以下内容,看看是否可以欺骗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)。所以现在我没有想法。

1 个答案:

答案 0 :(得分:0)

.NET不支持\?\文件路径。您需要依赖短文件名。

很糟糕,但有关于主题的MSKB:http://support.microsoft.com/kb/142982