Tests d'existence de fichier à l'aide de NSURL
Snow Leopard introduit de nombreuses nouvelles méthodes à utiliser NSURL objets pour se référer à des fichiers, pas des chemins d'accès ou des Services de Base' FSRefs.
Cependant, il y a une tâche que je ne peux pas trouver une URL de base de la méthode pour: Tester si un fichier existe. Je suis à la recherche d'une URL basée sur la version de -[NSFileManager fileExistsAtPath:
]. Comme cette méthode, elle doit retourner YES
si l'URL n'explique rien, si c'est un fichier, un répertoire, ou quoi que ce soit d'autre.
Je pourrais tenter de rechercher divers les valeurs de ressources, mais aucun d'entre eux sont explicitement garantie de ne pas exister si le fichier ne fonctionne pas, et certains d'entre eux (par exemple, NSURLEffectiveIconKey) pourrait s'avérer coûteux si elle n'.
Je pouvais NSFileManager de fileExistsAtPath:
, mais si il y a une méthode plus moderne, je préfère l'utiliser.
Est-il une simple méthode ou d'une fonction dans le Cacao, CF, ou des Services de Base garanti et documentés de me dire si un fichier donné (ou d'un fichier de référence) URL fait référence à un système de fichier de l'objet qui existe?
Vous devez vous connecter pour publier un commentaire.
NSURL n'ont cette méthode:
Qui "Retourne si la ressource pointée par une URL de fichier peut être atteint."
checkResourceIsReachableAndReturnError:
est uniquement disponible en 10.6 et versions ultérieures ne sont pas encore disponibles dans le SDK de l'iPhone.Sur iOS je ne pouvais pas trouver une autre façon..."
Ici est la Swift 2 réponse:
checkResourceIsReachable()->Void
et jeter l'exception, toutefois, ce que vous avez dit est correct pour Xcode 7.xDéterminer si un fichier donné (ou d'un fichier de référence) URL fait référence à un système de fichier de l'objet qui existe est intrinsèquement coûteuse pour des ressources distantes, l'10.6 uniquement (pas de iPhoneOS) de l'api pour cette CFURLResourceIsReachable() et [NSURL checkResourceIsReachableAndReturnerror:] sont à la fois synchrone, même si vous voulez les utiliser, pour un grand nombre de fichiers que vous auriez encore être à la recherche à un retard significatif de frais généraux.
Ce que vous devez faire est de mettre en place votre propre asynchrone de vérification de routine avec la mise en cache que séparément crée une liste de ressources valides.
Sinon les notes pour CFURLResourceIsReachable dans l'en-tête de l'état :
Parce que NSURL représente plus que locale des systèmes de fichiers, je ne pense pas qu'il y est une méthode générique qui peuvent tester leur existence de manière fiable. Au moins, le Cacao, la fondation ne contient pas une telle fonction (autant que je sache).
Si vous ne traitez qu'avec des locaux des systèmes de fichiers, je vous suggère de créer une catégorie pour les
NSURL
ou pourNSFileManager
, avec unurlExists:
message. Il serait de convertir leNSURL
à unNSString
(normalisé chemin), puis appelez le[NSFileManager fileExistsAtPath:]
message.checkResourceIsReachableAndReturnError:
avecisFileURL
pour le garder sain d'esprit.Rapide vous pouvez utiliser la
checkResourceIsReachable()
méthode, qui, malheureusement, va retournertrue
(si le fichier est accessible) ou générer une erreur (en expliquant pourquoi il ne peut pas être atteint).Pour obtenir un booléen (true/false) valeur au lieu de cela, utilisez cette syntaxe:
Si vous souhaitez enregistrer l'erreur:
Garder à l'esprit que c'est une opération coûteuse, et il pourrait être à jour immédiatement après (si un autre processus est la suppression d'un ou libère un fichier sur disque pendant que vous êtes vérifier si elle existe).
En général, il est préférable de ne pas vérifier si un fichier existe, au lieu de simplement tenter de lire ou d'écrire dans un fichier et de gérer toute erreur par la suite si elle échoue.