7

我正在尝试打开一个文件以写入它。该文件可能不存在。

我发现[NSFileHandle fileHandleForWritingAtPath:filePath]如果文件不存在则返回 nil。谷歌搜索后,我发现了这样的代码片段

[[NSData data] writeToFile:filePath atomically:YES]

我猜,这可以确保文件在打开之前存在。

我的问题是:后一种代码行是推荐的文件创建方式吗?NSFileHandle 没有创建新文件的例程(并且只能处理现有文件),这似乎很奇怪。

4

2 回答 2

14

NSFileHandle可能没有创建文件的方法,但NSFileManager有一个。你看过那堂课吗?

这对我来说很好,但请注意,它每次都会覆盖同一个文件

NSString *cachesFolder = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
NSString *file = [cachesFolder stringByAppendingPathComponent:@"testfile"];    
[[NSData data] writeToFile:file options:NSDataWritingAtomic error:nil];
于 2012-01-16T13:49:45.773 回答
0

在 Swift 4.x & 5.0 中,你可以这样做:

let yourData = Data() // the data to write

let cachesFolderPath = NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true).first

if let path = cachesFolderPath {
    let url = URL(fileURLWithPath: path).appendingPathComponent("xxx-cache")
    do {
        try yourData.write(to: url)
    } catch {
        print("writing failed: \(error.localizedDescription)")
    }
}
于 2019-04-30T03:25:48.177 回答