2011-03-22 1 views
0

je dois mettre des lignes distinctes dans un fichier, mais il semble que ce n'est pas pris en charge parEnviron 2000 chaînes dans un fichier

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 

    // the path to write file 
    NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@"myFile"]; 

    [dataString writeToFile:appFile atomically:YES]; 

Il ne met une chaîne dans un fichier mais il écrase précédent.

Des suggestions?

Répondre

2

Pour ajouter des données à un fichier existant, créez une instance NSFileHandle pour ce fichier, puis appelez -seekToEndOfFile et enfin -writeData:. Vous devrez vous-même convertir votre chaîne en objet NSData (avec l'encodage correct). Et n'oubliez pas de fermer la poignée de fichier lorsque vous avez terminé. Le moyen le plus simple, mais aussi le moins efficace, est de lire le contenu du fichier existant dans une chaîne, puis d'ajouter le nouveau texte à cette chaîne et d'écrire à nouveau sur le disque. Je ne ferais pas cela dans une boucle qui exécute 2000 fois, cependant.

+1

De plus, ils devraient vraiment penser à faire toutes les écritures en une seule passe, au lieu de 2000 écrit individuel. Ce dernier sera beaucoup plus lent, en particulier sur le stockage flash. –

+0

+1 pour le commentaire de Brad. –

0

Merci Ole! C'est ce que je cherchais.

Quelques exemples de code pour les autres:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 

//creating a path 
NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@"nameOfAFile"]; 
//clearing or creating (NSFileHande doesn't support creating a file it seems) 
NSString *nothing = @""; //remember it's CLEARING! so get rid of it - if you want keep data 
[nothing writeToFile:appFile atomically:YES encoding:NSUTF8StringEncoding error:nil]; 

//creating NSFileHandle and seeking for the end of file 
NSFileHandle *fh = [NSFileHandle fileHandleForWritingAtPath:appFile]; 
[fh seekToEndOfFile]; 

//appending data do the end of file 
NSString *dataString = @"All the stuff you want to add to the end of file";   
NSData *data = [dataString dataUsingEncoding:NSASCIIStringEncoding]; 
[fh writeData:data]; 

//memory and leaks 
[fh closeFile]; 
[fh release]; 
[dataString release]; 
Questions connexes