Write a file on iOS

IosIphoneFileNsbundle

Ios Problem Overview


How do I write a file on iOS? I'm trying to do it with the following code but I'm doing something wrong:

char *saves = "abcd";
NSData *data = [[NSData alloc] initWithBytes:saves length:4]; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@"MyFile"];
[data writeToFile:appFile atomically:YES];

I have created MyFile.txt on resources.

Ios Solutions


Solution 1 - Ios

May be this is useful to you.

//Method writes a string to a text file
-(void) writeToTextFile{
     	//get the documents directory:
     	NSArray *paths = NSSearchPathForDirectoriesInDomains
          	(NSDocumentDirectory, NSUserDomainMask, YES);
     	NSString *documentsDirectory = [paths objectAtIndex:0];

     	//make a file name to write the data to using the documents directory:
     	NSString *fileName = [NSString stringWithFormat:@"%@/textfile.txt", 
                          							  documentsDirectory];
     	//create content - four lines of text
     	NSString *content = @"One\nTwo\nThree\nFour\nFive";
     	//save content to the documents directory
     	[content writeToFile:fileName 
               			 atomically:NO 
                 			   encoding:NSUTF8StringEncoding 
                    				  error:nil];

}


//Method retrieves content from documents directory and
//displays it in an alert
-(void) displayContent{
     	//get the documents directory:
     	NSArray *paths = NSSearchPathForDirectoriesInDomains
                     	(NSDocumentDirectory, NSUserDomainMask, YES);
     	NSString *documentsDirectory = [paths objectAtIndex:0];

     	//make a file name to write the data to using the documents directory:
     	NSString *fileName = [NSString stringWithFormat:@"%@/textfile.txt", 
                          							  documentsDirectory];
     	NSString *content = [[NSString alloc] initWithContentsOfFile:fileName
                                                      usedEncoding:nil
                                                             error:nil];
     	//use simple alert from my library (see previous post for details)
     	[ASFunctions alert:content];
     	[content release];

}

Solution 2 - Ios

Your code is working at my end, i have just tested it. Where are you checking your changes? Use Documents directory path. To get path -

NSLog(@"%@",documentsDirectory);

and copy path from console and then open finder and press Cmd+shift+g and paste path here and then open your file

Solution 3 - Ios

Swift

func saveFile() {
    let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
    let documentsDirectory = paths[0] as! String
    let fileName = "\(documentsDirectory)/textFile.txt"
    let content = "Hello World"
    content.writeToFile(fileName, atomically: false, encoding: NSUTF8StringEncoding, error: nil)
}

func loadFile() {
    let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
    let documentsDirectory = paths[0] as! String
    let fileName = "\(documentsDirectory)/textFile.txt"
    let content: String = String(contentsOfFile: fileName, encoding: NSUTF8StringEncoding, error: nil)!
    println(content)
}

Swift 2

func saveFile() {
    let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
    let documentsDirectory = paths[0]
    let fileName = "\(documentsDirectory)/textFile.txt"
    let content = "Hello World"
    do{
        try content.writeToFile(fileName, atomically: false, encoding: NSUTF8StringEncoding)
    }catch _ {
        
    }
 
}

func loadFile()->String {
    let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
    let documentsDirectory = paths[0] 
    let fileName = "\(documentsDirectory)/textFile.txt"
    let content: String
    do{
       content = try String(contentsOfFile: fileName, encoding: NSUTF8StringEncoding)
    }catch _{
        content=""
    }
    return content;
}

Swift 3

func saveFile() {
    let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
    let documentsDirectory = paths[0]
    let fileName = "\(documentsDirectory)/textFile.txt"
    let content = "Hello World"
    do{
        try content.write(toFile: fileName, atomically: false, encoding: String.Encoding.utf8)
    }catch _ {
        
    }
    
}

func loadFile()->String {
    let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
    let documentsDirectory = paths[0]
    let fileName = "\(documentsDirectory)/textFile.txt"
    let content: String
    do{
        content = try String(contentsOfFile: fileName, encoding: String.Encoding.utf8)
    } catch _{
        content=""
    }
    return content;
}

Solution 4 - Ios

Try making

NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@"MyFile"];

as

NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@"MyFile.txt"];

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionRiccardo QueriView Question on Stackoverflow
Solution 1 - IosChetan BhalaraView Answer on Stackoverflow
Solution 2 - IossaadnibView Answer on Stackoverflow
Solution 3 - IosDardanView Answer on Stackoverflow
Solution 4 - Iosvisakh7View Answer on Stackoverflow