Удаление последней строки в файле iPhone iOS - PullRequest
1 голос
/ 28 февраля 2011

Как удалить последнюю строку в файле в iOS.

Ниже приведен код, который позволяет мне перейти к концу файла, но тогда я не знаю, как удалить эту последнюю строку.

NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

//make a file name to write the data to using the documents directory:
NSString *file = [NSString stringWithFormat:@"%@/%@.daa", documentsDirectory, MFILE_NAME];

NSFileHandle *aFileHandle = [NSFileHandle fileHandleForWritingAtPath:file]; 
//setting aFileHandle to write at the end of the file
[aFileHandle truncateFileAtOffset:[aFileHandle seekToEndOfFile]];

Спасибо за вашу помощь.

Ответы [ 3 ]

1 голос
/ 16 октября 2014

Уверен, что это может быть вашим решением:

NSFileHandle *file;
file = [NSFileHandle fileHandleForUpdatingAtPath:[self filePath]];

if (file == nil)
    NSLog(@"Failed to open file");

//get the last character count
long long lastChar = [file seekToEndOfFile];
lastChar--;
lastChar--;

//from where do you want to remove 
NSLog (@"Offset = %llu", lastChar);
//Move to position
[file seekToFileOffset: lastChar];

//write an empty string
[file writeData:[@" " dataUsingEncoding:NSUTF8StringEncoding]];

[file closeFile];
1 голос
/ 28 февраля 2011

Хорошо, после прочтения документации я получил следующее:

    NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSString *file = [NSString stringWithFormat:@"%@/%@.txt", documentsDirectory, @"file_name"];

    NSData *orgData = [NSData dataWithContentsOfFile:file];

    //Because there is only one char on my last line I make a range from 0 to length of data - 1 byte.
    NSRange range = {0, [orgData length]-1};

    NSData* shortData = [[NSData dataWithContentsOfFile:file] subdataWithRange:range];

    [shortData writeToFile:file atomically:YES];

Если вы знаете лучший способ, пожалуйста, дайте мне знать.

0 голосов
/ 01 марта 2011

Это возможно, в зависимости от файла.

Удаление одного символа не относится к такой вещи, как возврат каретки, поэтому на практике это может не сработать. Лучшим (более общим) решением было бы загрузить файл и переходить назад от последнего символа до тех пор, пока вы не найдете начало последней строки (т. Е. Все между последним и последним возвратом каретки и последней), а затем переписать файл без последней строки.

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