How to save file in the documents folder?

后端 未结 4 1135
半阙折子戏
半阙折子戏 2020-12-06 14:54

I am trying to save data in the documents folder on iPhone 5.1 simulator.

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDo         


        
相关标签:
4条回答
  • 2020-12-06 15:18

    Maybe because you have not created the file, the file you tested does not exist. :)

    You can do this to find the problem,

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory, @"myData.json"];
    NSLog(@"filePath %@", filePath);
    
    if (![[NSFileManager defaultManager] fileExistsAtPath:filePath]) { // if file is not exist, create it.
        NSString *helloStr = @"hello world";
        NSError *error;
        [helloStr writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:&error];
    }
    
    if ([[NSFileManager defaultManager] isWritableFileAtPath:filePath]) {
        NSLog(@"Writable");
    }else {
        NSLog(@"Not Writable");
    }
    
    0 讨论(0)
  • 2020-12-06 15:18

    get document directory path

    +(NSURL *)getDocumentsDirectoryPath
    {
        return [[[NSFileManager defaultManager]URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]lastObject];
    }
    

    write data to end of file

    +(void)saveText:(NSString *)textTobeSaved atPath:(NSString*)fileName
    {
        NSString *filePath = [NSString stringWithFormat:@"%@.text",fileName];
    
        NSString *path = [[self getDocumentsDirectoryPath].path
                          stringByAppendingPathComponent:filePath];
        NSFileHandle *fileHandler = [NSFileHandle fileHandleForWritingAtPath:path];
        if(fileHandler == nil) {
            [[NSFileManager defaultManager] createFileAtPath:path contents:nil attributes:nil];
            fileHandler = [NSFileHandle fileHandleForWritingAtPath:path];
        } else {
            textTobeSaved = [NSString stringWithFormat:@"\n-----------------------\n %@",textTobeSaved];
            [fileHandler seekToEndOfFile];
        }
    
        [fileHandler writeData:[textTobeSaved dataUsingEncoding:NSUTF8StringEncoding]];
        [fileHandler closeFile];
    }
    
    0 讨论(0)
  • 2020-12-06 15:20

    Try this:

    NSString *data = .... // your json representation
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@"myData.json"];
    [data writeToFile:appFile atomically:YES encoding:NSUTF8StringEncoding error:nil];
    
    0 讨论(0)
  • 2020-12-06 15:24

    Swap out your [NSString stringWithFormat:] for an [NSString stringByAppendingPathComponent:]. This makes or breaks your ability to create a viable path, or so my experience has taught me.

    Additionally, this sort of thing comes up when writing on the simulator vs a real device. The simulator is a lot more forgiving when you are saving things in the wrong paths than the device will be, and quite often you'll get the I/O working fine only to run into the notorious 'It works in the simulator!' pit. stringWithFormat: is just one way to fall in.

    0 讨论(0)
提交回复
热议问题