Проверьте, существует ли имя файла в каталоге документов - PullRequest
7 голосов
/ 27 июня 2011

В моем приложении я использую следующий код для сохранения изображений / файлов в каталоге документов приложения:

-(void)saveImageDetailsToAppBundle{
    NSData *imageData = UIImagePNGRepresentation(userSavedImage); //convert image into .png format.
    NSFileManager *fileManager = [NSFileManager defaultManager];//create instance of NSFileManager
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); //create an array and store result of our search for the documents directory in it
    NSString *documentsDirectory = [paths objectAtIndex:0]; //create NSString object, that holds our exact path to the documents directory
    NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png",txtImageName.text]]; //add our image to the path

    NSLog(fullPath);

    [fileManager createFileAtPath:fullPath contents:imageData attributes:nil]; //finally save the image

    NSLog(@"image saved"); 
}

Однако существует проблема с именем изображения. Если файл существует в каталоге документов, новый файл с тем же именем перезапишет старый файл. Как я могу проверить, существует ли имя файла в каталоге документов?

Ответы [ 4 ]

14 голосов
/ 27 июня 2011

Используйте метод NSFileManager fileExistsAtPath:, чтобы проверить, существует он или нет.

использование

if ( ![fileManager fileExistsAtPath:filePath] ) {
    /* File doesn't exist. Save the image at the path */
    [fileManager createFileAtPath:fullPath contents:imageData attributes:nil]; 
} else {
    /* File exists at path. Resolve and save */
}
6 голосов
/ 27 июня 2011
if ([[NSFileManager defaultManager] fileExistsAtPath:myFilePath])
5 голосов
/ 27 июня 2011
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *writablePath = [documentsDirectory stringByAppendingPathComponent:@"file name"];

if([fileManager fileExistsAtPath:writablePath]){ 
// file exist
}
else{ 
    // file doesn't exist
}
2 голосов
/ 29 апреля 2013

Как сказано в документации Apple, лучше выполнить какое-либо действие, а затем не обрабатывать отсутствие файла, чем проверить, существует ли файл.

Примечание. Попытка предикатного поведения на основе текущего состояния файлаСистемный или определенный файл в файловой системе не рекомендуется.Это может вызвать странное поведение или расы.Гораздо лучше попытаться выполнить операцию (например, загрузить файл или создать каталог), проверить ошибки и изящно обработать эти ошибки, чем пытаться заранее выяснить, будет ли операция успешной.Для получения дополнительной информации о состоянии гонки файловой системы см. «Условия гонки и безопасные операции с файлами» в Руководстве по безопасному кодированию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...