iOS

[iOS] Accessing Files and Directories 공식문서 번역

Kim_Baechu 2022. 9. 29. 20:10

공식문서

https://developer.apple.com/library/archive/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/AccessingFilesandDirectories/AccessingFilesandDirectories.html#//apple_ref/doc/uid/TP40010672-CH3-SW1

Accessing Files and Directories

파일을 열려면 먼저 파일 시스템에서 파일을 찾아야 합니다.

시스템 프레임워크는 라이브러리 디렉터리 및 그 내용과 같은 많은 잘 알려진 디렉터리에 대한 참조를 얻기 위한 많은 루틴을 제공합니다.

또한 알려진 디렉토리 이름에서 URL 또는 문자열 기반 경로를 작성하여 수동으로 위치를 지정할 수 있습니다.

 

파일의 위치를 알면 파일에 액세스하는 가장 좋은 방법을 계획할 수 있습니다.

파일 유형에 따라 여러 가지 옵션이 있을 수 있습니다.

알려진 파일 형식의 경우 일반적으로 기본 제공 시스템 루틴을 사용하여 파일 내용을 읽거나 쓰고 사용할 수 있는 object를 제공합니다.

사용자 지정 파일 형식의 경우 원시 파일 데이터를 직접 읽어야 할 수 있습니다.

 

Specifying the Path to a File or Directory

파일 또는 디렉터리의 위치를 지정하는 기본 방법은 NSURL 클래스를 사용하는 것입니다.

NSSstring 클래스는 경로 생성과 관련된 많은 방법을 가지고 있지만 URL은 파일 및 디렉터리를 찾는 더 강력한 방법을 제공합니다.

네트워크 리소스에서도 작동하는 앱의 경우 URL은 한 가지 유형의 개체를 사용하여 로컬 파일 시스템이나 네트워크 서버에 있는 항목을 관리할 수 있음을 의미합니다.

 

대부분의 URL에서 항목에 대한 경로를 얻을 때까지 적절한 NSURL 방법을 사용하여 디렉터리 및 파일 이름을 함께 연결하여 URL을 작성합니다.

이러한 방식으로 구축된 URL은 항목을 찾기 위해 디렉토리 계층을 통과하는 데 필요한 이름을 저장하기 때문에 경로 기반 URL이라고 합니다.

또한 디렉터리와 파일 이름을 함께 연결하여 문자열 기반 경로를 만들 수 있으며, 결과는 NSURL 클래스에서 사용하는 형식과는 약간 다른 형식으로 저장됩니다.

경로 기반 URL 외에도 고유한 ID를 사용하여 파일 또는 디렉토리의 위치를 식별하는 파일 참조 URL을 만들 수 있습니다.

 

다음 항목은 모두 유저 Documents 디렉터리에 있는 MyFile.txt이라는 파일에 대한 유효한 참조입니다.

Path-based URL: file://localhost/Users/steve/Documents/MyFile.txt

File reference URL: file:///.file/id=6571367.2773272/

String-based path: /Users/steve/Documents/MyFile.txt

 

…중략…

Locating Files Using Bookmarks

파일의 위치를 지속적으로 저장하려면 NSURL의 책갈피(bookmark) 기능을 사용하세요.

책갈피는 파일의 위치를 설명하는 NSData 객체에 포함된 불투명(opaque) 데이터 구조입니다.

앱 실행 사이에 경로 및 파일 참조 URL은 잠재적으로 취약하지만, 일반적으로 북마크를 사용하여 파일이 이동되거나 이름이 변경된 경우에도 파일에 대한 URL을 다시 만들 수 있습니다.

 

기존 URL에 대한 책갈피를 만들려면 NSURL에 [bookmarkDataWithOptions:includingResourceValuesForKeys:relativeToURL:error:](<https://developer.apple.com/documentation/foundation/nsurl/1417795-bookmarkdatawithoptions>)를 사용하세요.

[NSURLBookmarkCreationSuitableForBookmarkFile](<https://developer.apple.com/documentation/foundation/nsurlbookmarkcreationoptions/nsurlbookmarkcreationsuitableforbookmarkfile>)옵션을 지정하면 디스크에 저장하기에 적합한 NSData가 생성됩니다.

- (NSData*)bookmarkForURL:(NSURL*)url {
    NSError* theError = nil;
    NSData* bookmark = [url bookmarkDataWithOptions:NSURLBookmarkCreationSuitableForBookmarkFile
                                            includingResourceValuesForKeys:nil
                                            relativeToURL:nil
                                            error:&theError];
    if (theError || (bookmark == nil)) {
        // Handle any errors.
        return nil;
    }
    return bookmark;
}

NSURL의 [writeBookmarkData:toURL:options:error:](<https://developer.apple.com/documentation/foundation/nsurl/1408532-writebookmarkdata>)를 사용하여 영구 책갈피 데이터를 디스크에 쓰는 경우 시스템에서 디스크에 생성하는 것은 별칭(alias) 파일입니다.

별칭은 심볼릭 링크와 유사하지만 다르게 구현됩니다.

일반적으로 사용자는 시스템의 다른 위치에 있는 파일에 대한 링크를 만들 때 파인더에서 별칭을 만듭니다.

 

책갈피 데이터를 다시 URL로 변환하려면 URLByResolvingBookmarkData:options:relativeToURL:bookmarkDataIsStale:error:를 사용하세요.

- (NSURL*)urlForBookmark:(NSData*)bookmark {
    BOOL bookmarkIsStale = NO;
    NSError* theError = nil;
    NSURL* bookmarkURL = [NSURL URLByResolvingBookmarkData:bookmark
                                            options:NSURLBookmarkResolutionWithoutUI
                                            relativeToURL:nil
                                            bookmarkDataIsStale:&bookmarkIsStale
                                            error:&theError];
 
    if (bookmarkIsStale || (theError != nil)) {
        // Handle any errors
        return nil;
    }
    return bookmarkURL;
}