2010-07-20 5 views
0

J'utilise le code suivant pour ouvrir le contenu d'un fichier et l'enregistrer dans un autre fichier. lorsqu'il exécute la longueur du fichier d'origine est 793 mais le fichier enregistré est 0. J'ai également essayé de copier le fichier. Rien ne semble fonctionner.Problèmes avec NSString writeToFile

Y a-t-il des autorisations qui me manquent dans le répertoire des documents?

NSError *error; 
    NSString *basePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    NSString* nGram = [basePath stringByAppendingPathComponent:@"contacts.gram"]; 
NSString *oGram = [basePath stringByAppendingPathComponent:@"/../vText.app/model/lm/TAR9230/contacts.gram"]; 
     NSString *gramString = [[NSString alloc] initWithContentsOfFile:oGram encoding:NSUTF8StringEncoding error:&error]; 
     BOOL ok = [gramString writeToFile:nGram atomically:NO encoding:NSUnicodeStringEncoding error:&error]; 
     if(!ok) NSLog(@"Mayday!"); 
     NSLog(@"%d",[gramString length]); 
     gramString = [[NSString alloc] initWithContentsOfFile:nGram encoding:NSUTF8StringEncoding error:&error]; 
     NSLog(@"%d",[gramString length]); 
+0

Comment récupérez-vous le chemin du dossier de documents? [NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex: 0]; fait un bon travail pour moi. – samsam

+0

désolé, oublié d'ajouter le chemin du document getter – Kungfurabbits

+0

Les erreurs rapportent quelque chose? Vous ne semblez jamais les vérifier. – TechZen

Répondre

1

Ce bloc entier est inutile. Tout ce que vous avez besoin est:

NSString *fp=[[NSBundle mainBundle] pathForResource:@"contacts" ofType:@"gram"]; 
NSString *gramString = [[NSString alloc] initWithContentsOfFile:fp 
                 encoding:NSUTF8StringEncoding 
                  error:&error]; 

Vous ne voulez certainement pas essayer d'accéder directement à un fichier dans le paquet d'applications en utilisant un chemin hardcoded car le fichier est pas garanti d'être au même endroit exact dans chaque build .

Dans le code que vous avez, vous voulez utiliser la même constante de codage pour la lecture que pour l'écriture. Vous écrivez avec NSUnicodeStringEncoding mais vous avez lu avec NSUTF8StringEncoding. Ceux-ci devraient se chevaucher, mais pourquoi prendre la chance si vous connaissez le codage exact utilisé?

+0

c'était le problème; NSUnicodeStringEncoding => NSUTF8StringEncoding; certains comment j'ai raté ça, merci beaucoup. – Kungfurabbits

+0

sur une note de côté, est le pathForResource récursif? de votre code, il semble que c'est. Merci encore. – Kungfurabbits

+1

Oui, il trouvera une ressource dans l'ensemble d'applications, peu importe si elle l'est. Vous pouvez utiliser 'pathForResource: ofType: inDirectory:' ou des méthodes associées pour réduire les choses si vous le souhaitez. – TechZen

Questions connexes