Сбой при записи файла

#objective-c #writetofile

#objective-c #запись файла

Вопрос:

Я использую довольно простой метод сохранения имен файлов в текстовом файле. По какой-то причине, когда я инициирую запись файла, я получаю сбой:

 pathString = [NSString stringWithFormat:@"New FileName - %@.png", identifier];  
NSString *currentContents = [NSString stringWithContentsOfFile:saveFilePath encoding:NSUTF8StringEncoding error:nil];
NSString *newContents = [NSString stringWithFormat:@"%@:::%@",currentContents, pathString];
NSData *newData = [newContents dataUsingEncoding:NSUTF8StringEncoding];
[newData writeToFile:saveFilePath options:NSDataWritingAtomic error:nil];
  

Он считывает файл, помещает его содержимое в переменную с именем currentContents, затем добавляет новую строку в файл и перезаписывает ее. Что здесь происходит не так.

Без строки writeToFile это работает, с ней я получаю сбой.

Источник пути к файлу сохранения

 NSString *saveDocument = [NSString stringWithFormat:@"SavedFile.txt"];
NSString *docsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
saveFilePath = [docsDirectory stringByAppendingPathComponent:saveDocument];
  

NSLog пути сохранения файла показывает правильный путь

Комментарии:

1. Вы должны использовать, -[NSData writeToURL:options:error:] как рекомендует Apple, использование NSURL объектов поверх NSString объектов при работе с путями к файлам. Кстати, у вас синтаксическая ошибка в первой строке.

2. Ах, вы имеете в виду запятую, это было сделано во время моего процесса анонимизации, в моем исходном коде там есть запятая, лол. Хорошо, я попробую этот NSURL вместо NSString

3. ошибка: nil должно быть error: NULL

4. Ошибка @onnoweb сохраняется и по вашему предложению.

5. Откуда берется путь к файлу сохранения?

Ответ №1:

Я думаю, что ваша проблема на самом деле может заключаться в отсутствующем нулевом символе ( '' ) в конце вашего объекта NSData. Итак, в итоге вы получаете перепутанные данные. Возможно, вам все равно захочется использовать -writeToFile:atomically:encoding:error: в вашей новой строке сразу.

Ответ №2:

Оказывается, причина, по которой файл не записывался, заключалась в нераспределенной переменной:

 NSString *currentContents = [NSString stringWithContentsOfFile:saveFilePath encoding:NSUTF8StringEncoding error:nil];
  

должно было быть:

 NSString *currentContents = [[NSString alloc] initWithContentsOfFile:saveFilePath encoding:NSUTF8StringEncoding error:nil];