Question
J'essaie d'ouvrir un fichier pour l'écrire. Le fichier peut ne pas exister.
Je l'ai trouvé [NSFileHandle fileHandleForWritingAtPath:filePath]
Renvoie nil si le fichier n'existe pas. Après avoir googlé, j'ai trouvé des extraits de code comme celui-ci
[[NSData data] writeToFile:filePath atomically:YES]
Ce qui, je suppose, garantit l'existence des fichiers avant de l'ouvrir.
Mes questions sont les suivantes: la dernière ligne de code est-elle recommandée par la création de fichiers? Il semble étrange que NSFileHandle n'ait pas de routine pour créer un nouveau fichier (et peut traiter uniquement avec les fichiers existants).
La solution
NSFileHandle
peut ne pas avoir de méthode pour créer un fichier, mais NSFileManager
en a un. Avez-vous regardé cette classe?
Cela fonctionne bien pour moi, mais notez qu'il écrasera le même fichier à chaque fois
NSString *cachesFolder = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
NSString *file = [cachesFolder stringByAppendingPathComponent:@"testfile"];
[[NSData data] writeToFile:file options:NSDataWritingAtomic error:nil];
Autres conseils
Dans Swift 4.x & 5.0, vous pouvez le faire comme ceci:
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)")
}
}