iOS에서 파일 쓰기


78

iOS에서 파일을 어떻게 작성합니까? 다음 코드로 시도하고 있지만 뭔가 잘못하고 있습니다.

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];

리소스에 MyFile.txt를 만들었습니다.


4
무엇이 잘못되었는지 정확히 설명해주세요.
Shaggy Frog

답변:


26

귀하의 코드는 내 끝에서 작동하며 방금 테스트했습니다. 변경 사항을 어디에서 확인하고 있습니까? 문서 디렉토리 경로를 사용하십시오. 경로를 얻으려면-

NSLog(@"%@",documentsDirectory);

콘솔에서 경로를 복사 한 다음 파인더를 열고 Cmd + shift + g를 누르고 여기에 경로를 붙여 넣은 다음 파일을 엽니 다.


나는 이것이 내가 틀린 곳이라고 생각한다 .. 내 리소스 앱 디렉토리 내에 MyFile을 만들었습니다. Bu 거기에 변경 사항이 없습니다 .. 어디에서 파일을 확인하거나 만들어야합니까?
Riccardo Queri 2011

108

이것은 당신에게 유용 할 수 있습니다.

//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];

}

1
나는 존재 나던 것 같다 내가 작성하는 파일을 찾을 수 없습니다
리카르도 Queri

문서 디렉토리 경로를 변경할 수 있습니다.
Chetan Bhalara 2011

use-#define DOCUMENTS_FOLDER [NSHomeDirectory () stringByAppendingPathComponent : @ "Documents"]
Chetan Bhalara

내가 이것을하지 않으면 내 파일의 기본 디렉토리가 있습니까?
Riccardo Queri 2011

3
NSStringEncodingConversionAllowLossy는 무엇입니까? 인코딩은 NSUTF8StringEncoding이어야합니까?
Ron

12

빠른

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)
}

스위프트 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;
}

스위프트 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;
}

7

만들어보십시오

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

같이

NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@"MyFile.txt"];
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.