我想你可以做几件事:
NSFileHandle *fileHandle = [NSFileHandle fileHandleForWritingAtPath:aPath];
[fileHandle seekToEndOfFile];
[fileHandle writeData:[textToWrite dataUsingEncoding:NSUTF8StringEncoding]];
[fileHandle closeFile];
请注意,这会将 NSData 附加到您的文件中——而不是 NSString。请注意,如果您使用 NSFileHandle,则必须事先确保该文件存在。fileHandleForWritingAtPath
如果路径中不存在文件,则返回 nil。请参阅NSFileHandle 类参考 https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/nsfilehandle_Class/Reference/Reference.html.
或者你可以这样做:
NSString *contents = [NSString stringWithContentsOfFile:filepath];
contents = [contents stringByAppendingString:textToWrite];
[contents writeToFile:filepath atomically:YES encoding: NSUnicodeStringEncoding error:&err];
我相信第一种方法是最有效的,因为第二种方法涉及在将新内容写入文件之前将文件内容读入 NSString 中。但是,如果您不希望文件包含 NSData 并且更喜欢保留文本,那么第二个选项将更适合您。
[Update]由于 stringWithContentsOfFile 是已弃用 https://developer.apple.com/library/mac/documentation/cocoa/reference/foundation/classes/NSString_Class/DeprecationAppendix/AppendixADeprecatedAPI.html您可以修改第二种方法:
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];
请参阅 stackoverflow 上的问题 https://stackoverflow.com/questions/2954892/if-nsstring-stringwithcontentsoffile-is-deprecated-what-is-its-replacement