Par exemple, je veux écrire une valeur de chaîne, str
, dans un fichier, "yy"
, car il change à travers chaque itération d'une boucle. Ci-dessous, comment je suis actuellement mise en œuvre:Quelle est l'approche typique pour écrire des objets NSString dans un fichier?
NSOutputStream *oStream = [[NSOutputStream alloc] initToFileAtPath:@"yy" append:NO];
[oStream open];
while (...)
{
NSString *str = /* has already been set up */
NSData *strData = [str dataUsingEncoding:NSUTF8StringEncoding];
[oStream write:r(uint8_t *)[strData bytes] maxLength:[strData length]];
...
}
[oStream close];
Ignorer l'encodage UTF-8, que je ne demande, est-ce ainsi que NSString
s sont généralement écrits dans un fichier? C'est-à-dire en convertissant d'abord en un objet NSData
, puis en utilisant bytes
et en convertissant le résultat en uint8_t
pour NSOutputStream
?
Y at-il des alternatives qui sont utilisées plus souvent?
EDIT: Plusieurs NSString
s doivent être ajoutés au même fichier, d'où la boucle ci-dessus.
Est-ce également le cas que fileHandleForWritingAtPath nécessite que le fichier existe déjà? –
Non, il va créer un nouveau fichier dans tous les cas (en supprimant l'ancien s'il en existe déjà un). Voir les documents NSFileHandle pour plus de détails sur les autres constructeurs pouvant être ajoutés aux fichiers existants. –
En tant que débutant Cocoa, je suis venu ici pour plus d'informations, j'ai essayé ceci, et 'fileHandleForWritingAtPath' m'a toujours donné' null' pour les fichiers inexistants. J'ai dû utiliser POSIX 'open()' avec 'O_CREAT' pour créer le fichier en premier. Est-ce que quelqu'un a des informations à ce sujet, s'il vous plaît? –