iOS의 파일 작업(NSSearchPathForDirectoriesInDomains)

13743 단어
iOS의 NSSearchPathForDirectoriesInDomains 함수
iOS에서 NSSearchPathForDirectoriesInDomains 함수 매개 변수인 NSDocumentDirectory, NSDownloadsDirectory의 의미는 iOS가 그의 기본 함수에 대해 잘 모르기 때문에 프로그램을 쓸 때 모든 매개 변수를 테스트했다. 이렇게 하면 자신이 기억할 수 있다. 다음은 테스트 결과: NSDocumentDirectory
-(NSString *) dataFilePath {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory=[paths objectAtIndex:0];
    return [documentsDirectory stringByAppendingPathComponent:@"data.plisg"];
}

return value:
path:/Users/admin/Library/Application Support/iPhone Simulator/5.0/Applications/4BC5DA66-B3CA-4056-927B-999BC4DBF3CE/Documents/data.plist

NSDocumentationDirectory
-(NSString *) dataFilePath {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory , NSUserDomainMask, YES);
    NSString *documentsDirectory=[paths objectAtIndex:0];
    return [documentsDirectory stringByAppendingPathComponent:@"data.plisg" ];
}

return value:
path:/Users/admin/Library/Application Support/iPhone Simulator/5.0/Applications/4BC5DA66-B3CA-4056-927B-999BC4DBF3CE/Library/Documentation/data.plist

NSDownloadsDirectory
-(NSString *) dataFilePath {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDownloadsDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory=[paths objectAtIndex:0];
    return [documentsDirectory stringByAppendingPathComponent:@"data.plisg" ];
}

return value:
path:/Users/admin/Library/Application Support/iPhone Simulator/5.0/Applications/4BC5DA66-B3CA-4056-927B-999BC4DBF3CE/Downloads/data.plisg

다음으로 이동:http://marshal.easymorse.com/archives/3340
iOS의 파일 작업
샌드박스(sandbox)에 적용되기 때문에 파일 읽기와 쓰기 권한이 제한되어 몇 개의 디렉터리에서만 파일을 읽을 수 있습니다.
  • Documents: 응용 프로그램에서 사용자 데이터를 여기에 놓을 수 있으며 iTunes 백업 및 복구 시 이 디렉터리를 포함합니다
  • tmp: 임시 파일을 저장합니다. iTunes는 이 디렉터리를 백업하고 복구하지 않습니다. 이 디렉터리에서 파일은 응용 프로그램이 종료된 후에 삭제될 수 있습니다
  • Library/Caches: 캐시 파일을 저장하고 iTunes는 이 디렉터리를 백업하지 않으며 이 디렉터리에서 파일은 응용 프로그램에서 삭제되지 않습니다
  • Documents 디렉토리에서 파일 만들기
    코드는 다음과 같습니다.
    NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory                                             , NSUserDomainMask                                              , YES);  NSLog(@"Get document path: %@",[paths objectAtIndex:0]);
    NSString *fileName=[[paths objectAtIndex:0] stringByAppendingPathComponent:@"myFile"];  NSString *content=@"a";  NSData *contentData=[content dataUsingEncoding:NSASCIIStringEncoding];  if ([contentData writeToFile:fileName atomically:YES]) {     NSLog(@">>write ok.");  }
    ssh 로그인 장치를 통해 Documents 디렉터리에 생성된 파일을 볼 수 있습니다.
    위에서 설명한 ascii 인코딩 텍스트 파일을 만듭니다. 예를 들어 다음과 같이 한자를 사용할 수 있습니다.
    NSString *fileName=[[paths objectAtIndex:0] stringByAppendingPathComponent:@"myFile"];NSString *content=@ "밤이 깊어지면 사람이 멈춘다".  NSData *contentData=[content dataUsingEncoding:NSUnicodeStringEncoding];  if ([contentData writeToFile:fileName atomically:YES]) {     NSLog(@">>write ok.");  }
    ascii 인코딩을 사용하면 파일이 생성되지 않습니다.여기서 NSUnicodeStringEncoding을 사용하면 됩니다.
    filezilla에서 만든 파일에 다운로드하여 열면 중국어에 문제가 없습니다.
    다른 디렉토리에서 파일 만들기
    Caches 카탈로그와 같은 다른 파일 카탈로그를 지정하려면 카탈로그 공장 상수를 변경해야 합니다. 위의 코드는 변경되지 않습니다.
    NSArray *paths=NSSearchPathForDirectoriesInDomains(NSCachesDirectory                                                 , NSUserDomainMask                                                  , YES);
     
    NSSearchPathForDirectoriesInDomains를 사용하면 Caches 디렉토리와 Documents 디렉토리만 찾을 수 있습니다.
    tmp 디렉터리, 위의 방법에 따라 디렉터리를 얻을 수 없습니다. 함수가 적용되는 루트 디렉터리를 얻을 수 있습니다.
    NSHomeDirectory()
    즉 Documents의 상급 디렉터리이며, 당연히 tmp 디렉터리의 상급 디렉터리이기도 하다.그러면 파일 경로는 다음과 같이 쓸 수 있습니다.
    NSString *fileName=[NSHomeDirectory() stringByAppendingPathComponent:@"tmp/myFile.txt"];
    또는 보다 직접적으로 이 함수를 사용할 수 있습니다.
    NSTemporaryDirectory()
    그러나 생성된 경로는 다음과 같습니다.
    …/tmp/-Tmp-/myFile.txt
    리소스 파일 사용
    응용 프로그램을 작성할 때는 다음과 같은 리소스 파일을 자주 사용합니다.
    디바이스에 설치된 후 app 디렉토리의
    다음 코드는 파일을 가져오고 파일 내용을 인쇄하는 방법을 보여 줍니다.
    NSString *myFilePath = [[NSBundle mainBundle]                          pathForResource:@"f"                          ofType:@"txt"];  NSString *myFileContent=[NSString stringWithContentsOfFile:myFilePath encoding:NSUTF8StringEncoding error:nil];  NSLog(@"bundel file path: %@ file content:%@",myFilePath,myFileContent);
     
    코드 실행 효과:

    좋은 웹페이지 즐겨찾기