objective-c - puede - saber si existe un archivo c#
Compruebe si el archivo existe en la URL en lugar de la ruta (3)
¿Cómo puedo verificar si un archivo existe en una URL (en lugar de una ruta), para configurar un almacén predeterminado previamente completado en el simulador de iPhone?
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"Food.sqlite"];
/*
Set up the store.
For the sake of illustration, provide a pre-populated default store.
*/
NSFileManager *fileManager = [NSFileManager defaultManager];
// If the expected store doesn''t exist, copy the default store.
if (![fileManager fileExistsAtPath:storePath]) {
NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"Food" ofType:@"sqlite"];
if (defaultStorePath) {
[fileManager copyItemAtPath:defaultStorePath toPath:storePath error:NULL];
}
}
He leído que en las versiones recientes de las plantillas, el método applicationDocumentsDirectory devuelve una URL, por lo que he cambiado el código para usar objetos NSURL para representar la ruta del archivo. Pero en [fileManager fileExistsAtPath:storePath]
, necesito cambiar fileExistsAtPath
a algo como fileExistsAtURL
(obviamente no existe).
He comprobado la referencia de clase de NSFileManager y no he encontrado ninguna tarea adecuada para mi propósito.
¿Alguna pista por favor?
Para una URL del sistema de archivos, el propio NSURL
tiene un método para verificar la accesibilidad de una URL
NSError *error;
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"Food.sqlite"];
if ([storeURL checkResourceIsReachableAndReturnError:&error]) {
// do something
} else {
NSLog(@"%@", error);
}
if (![fileManager fileExistsAtPath:[storeURL path]])
...
De la documentation :
Si este objeto de URL contiene una URL de archivo (como se determina con isFileURL), el valor de retorno de este método es adecuado para la entrada en los métodos de NSFileManager o NSPathUtilities. Si el camino tiene una barra diagonal, se elimina.
if (![fileManager fileExistsAtPath:[storeURL path]])
está bien, pero tenga cuidado: para una url como:
..../Documents/1158a3c96ca22c41b8e731b1d1af0e1e?d=mm&s=50
[storeURL path]
le dará esa ruta (se aplica a [storeURL lastPathComponent]
:
..../Documents/1158a3c96ca22c41b8e731b1d1af0e1e
pero si usa lastPathComponent en una cadena como /var/mobile/Applications/DB92F4DC-49E4-4B4A-8271-6A9DAE6963BC/Documents/1158a3c96ca22c41b8e731b1d1af0e1e?d=mm&s=50
1158a3c96ca22c41b8e731b1d1af0e1e?d=mm&s=50
Y eso es bueno, ya que en un url, ''?'' se usa para los parámetros GET, pero si se mezcla con una cadena, es posible que tenga problemas.