我有一个日志(log)文件,我正试图将数据附加到它的末尾.我有一个NSMutableString textToWrite变量,我正在做以下工作:

[textToWrite writeToFile:filepath atomically:YES 
                                    encoding: NSUnicodeStringEncoding error:&err];

但是,当我这样做时,文件中的所有文本都会替换为textToWrite中的文本.我如何将其附加到文件的末尾?(或者更好的是,我如何在文件末尾添加新的行?)

推荐答案

我想你可以做几件事:

NSFileHandle *fileHandle = [NSFileHandle fileHandleForWritingAtPath:aPath];
[fileHandle seekToEndOfFile];
[fileHandle writeData:[textToWrite dataUsingEncoding:NSUTF8StringEncoding]];
[fileHandle closeFile];

请注意,这会将NSData附加到文件中,而不是NSString.请注意,如果使用NSFileHandle,则必须确保该文件已存在.如果路径中不存在文件,fileHandleForWritingAtPath将返回nil.看NSFileHandle class reference.

或者你可以:

NSString *contents = [NSString stringWithContentsOfFile:filepath];
contents = [contents stringByAppendingString:textToWrite];
[contents writeToFile:filepath atomically:YES encoding: NSUnicodeStringEncoding error:&err];

我相信第一种方法是最有效的,因为第二种方法涉及在将新内容写入文件之前将文件内容读入NSString.但是,如果您不希望文件包含NSData,并且更愿意将其保留为文本,那么第二个选项将更适合您.

[Update]

NSError* error = nil;
NSString* contents = [NSString stringWithContentsOfFile:filepath
                                               encoding:NSUTF8StringEncoding
                                                  error:&error];
if(error) { // If error object was instantiated, handle it.
    NSLog(@"ERROR while loading from file: %@", error);
    // …
}
[contents writeToFile:filepath atomically:YES
                                 encoding:NSUnicodeStringEncoding
                                    error:&err];

See question on stackoverflow

Objective-c相关问答推荐

将 NSInteger 转换为 NSIndexpath

具有自定义视图的相机

iOS 7 / Xcode 5:以编程方式访问设备启动图像

从日、月、年生成 NSDate

如何将 UISlider 垂直放置?

在 NSData 和 base64 字符串之间转换

我怎样才能拥有一个同时包含图像和文本的 UIBarButtonItem?

ios 13 - 带有 UISearchBar _searchField 的自定义 SearchBar 不起作用

MKMapView MKPointAnnotation 点击​​事件

判断用户是否在连续的 UISlider 上完成滑动?

iOS NSLayoutConstraint 使用 constraintWithItem 固定宽度

使用 DatePicker 展开和折叠 UITableViewCells

从 UIImage 获取 Exif 数据 - UIImagePickerController

如何在 Objective-C 中将 NSString 解析为 BOOL?

如何查看 NSError?

`[super viewDidLoad]` 约定

UITableView,我如何知道 cellForRowAtIndexPath 期间的哪个部分?

如何在 iOS 中创建自定义 UIActivity?

如何在 Objective-C 中创建可变参数方法

Unwind Segue 在 iOS 8 中不起作用