1

我希望能够在LocalCacheFolder之内创建文件和文件夹,而不用担心总路径长度超过248个字符,这在我的应用程序中目前是个问题。除了让我的应用程序生成更短的路径并避免嵌套之外,处理这个问题的好方法是什么?如何在WinRT中绕过MAX_PATH?

其他方面:

我发现,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文件的命名空间,这在理论上给我的Unicode路径与最大长度32,767个字符:

var path = Windows.Storage.ApplicationData.Current.LocalCacheFolder.Path; 
var cacheFolder = await StorageFolder.GetFolderFromPathAsync(@"\\?\" + p); 

此尝试失败,例外情况为:The specified path is invalid. (Exception from HRESULT: 0x800700A1)。所以现在我没有想法。

+0

也许你可以试试[CreateFile2](http://msdn.microsoft.com/en-us/library/windows/desktop/hh449422%28v = vs.85%29.aspx)? –

回答

0

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

它很烂,但关于这一主题的MSKB:http://support.microsoft.com/kb/142982

+0

这不是一个.NET问题,因为我使用的是WinRT API,而不是.NET API。此外,该文件是古老的,我质疑它提供了适当的解决方案。 –

+0

你绝对不想依赖短文件名,因为它们可能被关闭。 –

+0

@FactorMystic你的例子是使用.NET,这就是为什么\\?\失败。使用原生入口点获得成功。文档可能比较陈旧,但仍然适用。 – whoisj