Problème écriture dans un fichier [Résolu]

zhuzhuzhuzhu Membre
mars 2015 modifié dans API AppKit #1

le nom de mon fichier s'appelle : Test.txt


output est une chaine de caractère ("nsstring")


Lorsque je suis en simulateur et que je fait : 


 


NSURL* url = [[NSBundle mainBundle] URLForResource:@Test withExtension:@txt];   // chemin d'accès au fichier .txt 


[output writeToFile:url atomically:YES encoding:NSUTF8StringEncoding error:nil];


 


cela fonctionne très bien, mais lorsque je le le compile sur la tablette, le "gdb" me dit que 


le fichier ne comporte rien.


Le fichier ce situe dans le doc "Resources" de l'application.  


Est-il possible de passé par l'url pour pouvoir écrire dans un txt?


Réponses

  • Les ressources du Bundle sont en lecture seule.


  • Il faut utiliser les méthodes de localisation des dossiers standards de NSFileManager pour trouver par exemple le dossier des documents. Là  ils sont en lecture/écriture.


  • j'ai trouver ceci: http://www.techotopia.com/index.php/Working_with_Files_in_Objective-C

    je testerai donc demain vers 10h (j'ai laisser le mac sur lequel je code au lycée)  :

    NSFileHandle *file;

    NSMutableData *data;



    data = [NSMutableData dataWithBytes:output length:strlen(output)];



    file = [NSFileHandle fileHandleForUpdatingAtPath: @Test.txt];


    if (file == nil)

    NSLog(@Failed to open file);



    [file seekToFileOffset: 10];


    [file writeData: data];


    [file closeFile];


     


    merci pour les réponses.


  • Non, c'est ta première méthode qui est la bonne. Simplement, il faut que l'url de ton fichier soit différente. Là , ton fichier est dans le bundle : tu ne peux pas y écrire. Il faut que tu écrives dans un URL qui est dans le dossier "documents" associé à  ton app.
  • Du coup il faudrait que j'enlève le [NSBundle mainBundle] ?


  • Joanna CarterJoanna Carter Membre, Modérateur
    mars 2015 modifié #8

    Je craque !



    {
    NSString *output = @nsstring;

    NSFileManager *fileManager = [NSFileManager defaultManager];

    NSURL *documentsURL = [fileManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask].firstObject;

    NSURL *fileURL = [documentsURL URLByAppendingPathComponent:@Test.txt];

    NSError *error = nil;

    if (![output writeToURL:fileURL atomically:YES encoding:NSUTF8StringEncoding error:&error])
    {
    NSLog(@%@", error);
    }

    NSString *input = [NSString stringWithContentsOfURL:fileURL encoding:NSUTF8StringEncoding error:&error];

    if (error)
    {
    NSLog(@%@", error);
    }
    }

    Et, pour référence https://developer.apple.com/library/ios/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html


  • J'ai essayé ton code Joanna mais sa n'écrit pas dans le fichier, il n'affiche pas d'erreur non plus.


  • Joanna CarterJoanna Carter Membre, Modérateur

    Où cherches-tu pour le fichier ? T'as vérifié avec le debugger que input contient la valeur ?


  • à  c'est bon j'ai réussi a réglé le soucis, j'avais laisser un bundle sur la récupération du contenu fichier en lecture seul, du coup il récupéré rien ... merci Joanna, ce forum est vraiment bien, la communauté est toujours présente :) sujet résolu


Connectez-vous ou Inscrivez-vous pour répondre.