2010-03-25 4 views
1

저는 Mac에서 Xcode로 프로그래밍 중입니다. 번들로 파일을 읽고 쓸 수있는 명령 줄 응용 프로그램이 있고이 파일에 액세스하는 방법이 궁금합니다. 씨 남자C에서 명령 줄 응용 프로그램 번들에 액세스하는 방법

편집

감사 : 난 그냥 사용자의 라이브러리 폴더에 폴더를 만든 경우가 더 잘 작동겠습니까?

+1

명령 줄 도구는 일반적으로 번들이 아닙니다. 응용 프로그램 구조에 대해 더 알려 줄 수 있습니까? –

+1

많은 경우에 권한 문제가 발생하기 때문에 번들의 파일에 * 쓰는 것을 원하지 않을 수도 있습니다. 독서는 괜찮을 것입니다. –

답변

3

실제로 번들이 있다고 가정하면 CoreFoundation CFBundle API을 사용할 수 있습니다. CFBundleGetMainBundle()을 사용하여 앱의 번들을 찾고 CFBundleCopy*URL() 함수를 사용하여 번들의 URL과 다양한 구성 요소를 가져올 수 있습니다.

그러나 응용 프로그램은 해당 번들에 쓸 수 없습니다. 쓰기 권한이없는 현재 사용자 또는 서명 된 번들이 손상되는 등 여러 가지가 잘못 될 수 있습니다. 일반적으로 응용 프로그램은 ~/Library/Application Support 폴더에 사용자가 편집 할 수있는 파일이 아닌 파일을 만들어야합니다 *. 사용자 문서의 일반적인 위치는 문서 폴더입니다.

(* "사용자 편집 가능"을 명확히하기 위해 사용자가 일반적으로 앱 인터페이스를 통해 단독으로 액세스하는 데이터의 개인 저장소가 아닌 내비게이션으로 열리는 파일을 의미합니다. 예를 들어 텍스트 편집기 문서 Stickies 노트가 응용 프로그램 지원으로 이동하는 동안 문서로 이동하십시오.)

+0

좋아요, 그래서 사용자가 편집 할 수있는 파일은 어떻게해야합니까? –

+2

그러나 앱이'~/Documents'에 파일을 자동으로 덤프하지 않도록하십시오. 사용자의'Documents' 폴더를 어수선하게 만드는 것은 무례합니다. – mipadi

+0

@mipadi : 사용자 문서 폴더에 폴더를 만들고 거기에서 작업해도 괜찮습니까? –

3

난 당신이, 질문하지만 당신은 당신의 자원 중 하나의 경로를 원하는 경우 사용할 수있는 이해한다면 확실하지 : 당신은 그냥 응용 프로그램 디렉토리를 원하는 경우

NSString *path = (NSString*)[[NSBundle mainBundle] pathForResource:@"sample" ofType:@"png"]; 

당신이 사용할 수 있습니다

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [[paths objectAtIndex:0] retain]; 

또는

NSArray *resPaths = NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, NSUserDomainMask, YES); 
NSString *resourceDirectory = [[resPaths objectAtIndex:0] retain]; 

내가 지금 내 맥에 있지, 그래서 난 그냥 붙여 넣기 해요 우리의 프레임 워크에서.

+0

참고 : 실제로 명령 줄 도구는 일반 앱 번들로 빌드합니다. – Andreas

+0

어떻게 실행합니까? –

+0

OK, Objective-C에서 사용했지만 내 프로그램은 C 언어로되어 있으며 두 번째와 세 번째 프로그램은 일반 C 배열로 작동합니까? –

관련 문제