Saltar al contenido

¿Cómo verificar si existe un archivo en la carpeta Documentos?

Basta ya de buscar por todo internet ya que estás al sitio correcto, contamos con la respuesta que deseas pero sin problema.

Solución:

Rápido 3:

let documentsURL = try! FileManager().url(for: .documentDirectory,
                                          in: .userDomainMask,
                                          appropriateFor: nil,
                                          create: true)

… le da una URL de archivo del directorio de documentos. Lo siguiente verifica si hay un archivo llamado foo.html:

let fooURL = documentsURL.appendingPathComponent("foo.html")
let fileExists = FileManager().fileExists(atPath: fooURL.path)

C objetivo:

NSString* documentsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];

NSString* foofile = [documentsPath stringByAppendingPathComponent:@"foo.html"];
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:foofile];

Apple recomienda no confiar en el método fileExistAtPath:. A menudo es mejor simplemente intentar abrir un archivo y solucionar el error si el archivo no existe.

Referencia de la clase NSFileManager

Nota: No se recomienda intentar predicar el comportamiento en función del estado actual del sistema de archivos o de un archivo en particular en el sistema de archivos. Si lo hace, puede provocar un comportamiento extraño o condiciones de carrera. Es mucho mejor intentar una operación (como cargar un archivo o crear un directorio), buscar errores y manejar esos errores con gracia que tratar de averiguar de antemano si la operación tendrá éxito. Para obtener más información sobre las condiciones de carrera del sistema de archivos, consulte “Condiciones de carrera y operaciones seguras de archivos” en la Guía de codificación segura.

Fuente: referencia de API de desarrollador de Apple

De la guía de codificación segura.

Para evitar esto, los programas a menudo verifican que no exista un archivo temporal con un nombre específico en el directorio de destino. Si existe un archivo de este tipo, la aplicación lo elimina o elige un nuevo nombre para el archivo temporal para evitar conflictos. Si el archivo no existe, la aplicación abre el archivo para escritura, porque la rutina del sistema que abre un archivo para escritura crea automáticamente un nuevo archivo si no existe ninguno. Un atacante, al ejecutar continuamente un programa que crea un nuevo archivo temporal con el nombre apropiado, puede (con un poco de persistencia y un poco de suerte) crear el archivo en el intervalo entre cuando la aplicación verificó para asegurarse de que el archivo temporal no existía. y cuando lo abre para escribir. Luego, la aplicación abre el archivo del atacante y escribe en él (recuerde, la rutina del sistema abre un archivo existente, si lo hay, y crea un archivo nuevo solo si no hay ningún archivo existente). El archivo del atacante puede tener permisos de acceso diferentes a los del archivo temporal de la aplicación, por lo que el atacante puede leer el contenido. Alternativamente, el atacante podría tener el archivo ya abierto. El atacante podría reemplazar el archivo con un enlace físico o un enlace simbólico a algún otro archivo (ya sea propiedad del atacante o un archivo del sistema existente). Por ejemplo, el atacante podría reemplazar el archivo con un enlace simbólico al archivo de contraseñas del sistema, de modo que después del ataque, las contraseñas del sistema se hayan dañado hasta el punto de que nadie, incluido el administrador del sistema, pueda iniciar sesión.

Si configura su sistema de archivos de manera diferente o busca una forma diferente de configurar un sistema de archivos y luego verifica si existe un archivo en la carpeta de documentos, aquí hay otro ejemplo. también muestra la verificación dinámica

for (int i = 0; i < numberHere; ++i)
    NSFileManager* fileMgr = [NSFileManager defaultManager];
    NSString *documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
    NSString* imageName = [NSString stringWithFormat:@"image-%@.png", i];
    NSString* currentFile = [documentsDirectory stringByAppendingPathComponent:imageName];
    BOOL fileExists = [fileMgr fileExistsAtPath:currentFile];
    if (fileExists == NO)
        cout << "DOESNT Exist!" << endl;
     else 
        cout << "DOES Exist!" << endl;
    

Si te gusta este mundo, tienes la opción de dejar una crónica acerca de qué te ha parecido este tutorial.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *