String Representations of File Paths
OSXDEV
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) |




