2016-04-30 1 views
1

Je lis un fichier avec une barre oblique dans son nom. Je peux vérifier qu'il existe dans le chemin où je le cherche, mais créer un NSData échoue. J'ai essayé de remplacer le / par un %2F dans la chaîne que j'utilise pour créer l'URL, mais cela n'a pas fait de différence.Comment encoder un fichier NSURL pour pointer vers un fichier avec un '/' dans le nom

C'est le code qui construit l'URL:

let fileID = "This/That" 
let filename = "\(fileID).json" 

let bundleDirURL = myBundle.URLForResource("dirname", withExtension: nil, subdirectory: "MyFiles") 
let fileURL = bundleDirURL.URLByAppendingPathComponent("Subpath").URLByAppendingPathComponent(filename) 

let data = NSData(contentsOfURL: fileURL) 

La ligne de liste me donne une donnée nulle, même si le fichier existe dans le bon chemin. Je sais que c'est le / qui le fait trébucher. Comment puis-je réparer cela? Je dois garder le / dans le nom de fichier.

Répondre

3

/ n'est pas un caractère légal dans les noms de fichiers Darwin (OS X ou iOS). L'interface utilisateur fait juste regarder comme c'est dans certains cas. OS X échange : pour /. Ainsi, le nom réel de votre fichier est This:That. En fonction de l'outil que vous utilisez, il sera affiché comme This:That ou This/That. C'est un vieux hold-up de Mac OS 9. Dans Mac OS 9 et plus tôt, : est illégale, mais / est légal. Dans Darwin (via OS X), le contraire est vrai.

Vous avez vraiment, vraiment envie d'éviter cette situation si vous le pouvez, et tout simplement pas avoir / ou : dans vos noms de fichiers (- et _ sont généralement plus sûrs, et . est souvent bien). Mais si vous devez, alors vous devrez l'échanger contre : dans votre chaîne.