1

Je veux être en mesure de créer des fichiers et des dossiers à l'intérieur de LocalCacheFolder sans vous inquiéter que la longueur totale du chemin sera plus de 248 caractères, ce qui est actuellement un problème dans mon application. Quel est un bon moyen de faire face à cela, en plus de faire de mon application générer des chemins plus courts et éviter l'imbrication?Comment se déplacer dans MAX_PATH dans WinRT?

contexte supplémentaires:

J'ai trouvé que les applications WinRT sont sensibles à MAX_PATH limites. Dans mon application, lors de l'appel StorageFolder.CreateFileAsync je reçois un System.IO.PathTooLongException avec le message:

« Le chemin d'accès spécifié, le nom de fichier, ou les deux sont trop longtemps le nom de fichier complet qualifié doit être inférieure à 260 caractères, et. Le nom du répertoire doit être inférieur à 248 caractères. "

Cela se produit assez souvent lors de la création de quelques sous-dossiers imbriqués à l'intérieur de Windows.Storage.ApplicationData.Current.LocalCacheFolder, parce que le LocalCacheFolder est en fait C:\Data\Users\DefApps\APPDATA\Local\Packages\<my_package>\LocalCache\, et donc, le nombre de caractères autorisés dans mon dossier créé app-/ fichiers est considérablement réduite.

Ce que j'ai essayé:

Compte tenu de l'arrière-plan dans this article, j'ai essayé ce qui suit pour voir si je pouvais duper WinRT en utilisant un espace de noms de fichiers Win32, ce qui me donnerait théoriquement des chemins Unicode avec une longueur max de 32.767 caractères:

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

Cette tentative échoue avec une exception: The specified path is invalid. (Exception from HRESULT: 0x800700A1). Alors maintenant, je suis à court d'idées.

+0

Peut-être que vous pourriez essayer [CreateFile2] (http://msdn.microsoft.com/en-us/library/windows/desktop/hh449422%28v = vs.85% 29.aspx)? –

Répondre

0

.NET ne prend pas en charge les chemins de fichier \? \. Vous devrez compter sur des noms de fichiers courts.

Il suce, mais il a MSKB sur le sujet: http://support.microsoft.com/kb/142982

+0

Ce n'est pas une question .NET en soi, car j'utilise des API WinRT, pas des API .NET. Aussi cette documentation est ancienne et je doute qu'elle apporte la solution appropriée ici. –

+0

Vous ne voulez certainement pas dépendre de noms de fichiers courts, car ils peuvent être désactivés. –

+0

@FactorMystic votre exemple utilise .NET et c'est pourquoi \\? \ Échoue. Utilisez les points d'entrée natifs pour réussir. La documentation peut être ancienne, mais elle s'applique toujours. – whoisj

Questions connexes