objective-c - 使用 NSMutableString 追加到文件末尾

标签 objective-c ios file-io append nsmutablestring

我有一个日志文件,我正在尝试将数据 append 到其末尾。我有一个 NSMutableString textToWrite 变量,我正在执行以下操作:

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

但是,当我执行此操作时,文件中的所有文本都将替换为 textToWrite 中的文本。我怎样才能 append 到文件的末尾? (或者更好的是,如何在新行中追加到文件末尾?)

最佳答案

我猜你可以做几件事:

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

请注意,这会将 NSData append 到您的文件中——而不是 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 并且希望将其保留为文本,则第二个选项将更适合您。

[更新] 因为 stringWithContentsOfFile 是 deprecated您可以修改第二种方法:

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 - 使用 NSMutableString 追加到文件末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11106584/

相关文章:

objective-c - iPad 和 iPhone 使用不同图像时如何最小化代码?

objective-c - 方法: multiple parameters or structure?

ios - 如何为 cell.imageView.frame 设置框架?

ios - 在对象初始化时为错误的参数值Objective-C引发错误

ios - UISearchBar 结束编辑,隐藏键盘,但屏幕仍然变暗

objective-c - 在按钮 B 的 TouchDown 期间触发 Button A 的 TouchDown

ios - dyld_shared_cache_extract_dylibs 在 iOS 13.1.3 上运行 6 秒以上失败

java - 如何在java中获取目录和子目录中的所有文件的名称

java - Java中非常简单的用户登录系统

java - 用 Java 将整数数组写入文件的最快方法?