String Representations of File Paths

OSXDEV

Jump to: navigation, 찾기

NSString 은 스트링을 파일-시스템 경로로 다루기 위한 메소드를 풍부하게 제공합니다. 경로에서 디렉토리, 파일명, 확장자를 추출할 수 있으며 틸드 표현("~me"와 같은 표현)을 확장하거나 사용자의 홈 디렉토리를 위해 생성할 수 있으며, 심볼릭 링크, 중복되는 슬래쉬, "."(현재 디렉토리)로의 레퍼런스, ".."(부모 디렉토리)등을 포함하는 경로를 정리해줍니다.

목차

[편집] Representing a Path

NSString은 '/'을 경로 구분자로 "."을 확장자 구분자로 경로를 표현합니다. 스트링을 경로 인자로 받는 메소드는 필요에 따라 이들 일반 표현을 적절한 시스템-지정 형태로 변환해야 합니다. 암묵적 루트 디렉토리를 갖는 시스템에서 절대 경로는 경로 구분자나 틸드 포혐으로 시작합니다. ("~/..."이나 "~user/...") 디바이스를 지정해야만 하는 경우에는 시스템 의존성을 소개하는 것으로 직접 하거나 스트링 객체가 기본 디바이스를 추가하도록 할 수 있습니다.

[편집] User Directories

다음 예는 NSString의 경로 유틸리티와 다른 Cocoa 함수를 사용하여 유저 디렉토리를 얻어오는 방법을 보여줍니다.


// assuming that users’ home directories are stored in /Users
 

NSString *meHome = [@"~me" stringByExpandingTildeInPath];

// meHome = @"/Users/me"

 

NSString *mePublic = [@"~me/Public" stringByExpandingTildeInPath];

// mePublic = @"/Users/me/Public"

현재 사용자의 홈 디렉토리와 주어진 사용자의 홈 디렉토리를 각각 NSHomeDirectory와 NSHomeDirectoryForUser를 사용하여 찾을 수 있습니다.


NSString *currentUserHomeDirectory = NSHomeDirectory();

NSString *meHomeDirectory = NSHomeDirectoryForUser(@"me");


일반적으로, NSSearchPathForDirectoriesInDomains 함수를 사용하여 현재 사용자의 표준 디렉토리를 찾을 수 있습니다. 예를 들어,

NSString *documentsDirectory =

                [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];

대신 다음과 같이 해야 합니다.

NSString *documentsDirectory;

NSArray *paths = NSSearchPathForDirectoriesInDomains

                    (NSDocumentDirectory, NSUserDomainMask, YES);

if ([paths count] > 0)  {

    documentsDirectory = [paths objectAtIndex:0];

}


[편집] Path Components

NSString은 스트링을 파일-시스템 경로로 다루도록 하는 메소드를 풍성하게 제공합니다. 예를 들어,

pathExtension 리시버를 경로로 해석하여 리시버의 확장자를 반환합니다.
stringByDeletingPathExtension 리시버의 확장자를 삭제하여 새로 생성한 스트링을 반환합니다.
stringByDeletingLastPathComponent 리시버로부터 마지막 경로 구분자와 마지막 경로 컴포넌트를 삭제하여 새로 생성한 스트링을 반환합니다.

이들 메소드와 NSString Class Reference에 설명되어있는 관련 메소드를 사용하여 경로의 디렉토리, 파일명, 확장자를 다음 예에 나온 것 처럼 뽑아낼 수 있습니다.


 
NSString *documentPath = @"~me/Public/Demo/readme.txt";

 

NSString *documentDirectory = [documentPath stringByDeletingLastPathComponent];

// documentDirectory = @"~me/Public/Demo"

 

NSString *documentFilename = [documentPath lastPathComponent];

// documentFilename = @"readme.txt"

 

NSString *documentExtension = [documentPath pathExtension];

// documentExtension = @"txt"

[편집] File Name Completion

completePathIntoString:caseSensitive:matchesIntoArray:filterTypes:를 사용하여 파일명의 가능한 확장을 찾을 수 있습니다. 예를 들어, ~/Demo 디렉토리에 다음과 같은 파일들이 있다고 합시다.

ReadMe.txt readme.html readme.rtf recondite.txt test.txt

경로 ~/Demo/r 에 가능한 모든 확장을 다음과 같이 찾을 수 있습니다.

 
NSString *partialPath = @"~/Demo/r";

NSString *longestCompletion;

NSArray *outputArray;

 

unsigned allMatches = [partialPath completePathIntoString:&longestCompletion

    caseSensitive:NO

    matchesIntoArray:&outputArray

    filterTypes:NULL];

 

// allMatches = 3

// longestCompletion = @"~/Demo/re"

// outputArray = (@"~/Demo/readme.html", "~/Demo/readme.rtf", "~/Demo/recondite.txt")

경로 ~/Demo/r 에 ".txt"나 ".rft" 확장자를 갖는 경로들의 확장은 다음과 같이 찾을 수 있습니다.

NSArray *filterTypes = [NSArray arrayWithObjects:@"txt", @"rtf", nil];

 

unsigned textMatches = [partialPath completePathIntoString:&outputName

    caseSensitive:NO

    matchesIntoArray:&outputArray

    filterTypes:filterTypes];

// allMatches = 2

// longestCompletion = @"~/Demo/re"

// outputArray = (@"~/Demo/readme.rtf", @"~/Demo/recondite.txt")


< Previous Page Next Page >



번역자 사용자:Idiel
원본문서링크 http://developer.apple.com/documentation/Cocoa/Conceptual/Strings/Articles/ManipulatingPaths.html (Last Updated - 2007-10-18)