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