2010-01-23 86 views
3

如何獲取應用程序目錄中的文件(.app所在的文件夾),並獲取絕對路徑。假設相對路徑是「Data/file.txt」,我將如何使用Objective C將其作爲絕對路徑?我有用戶輸入他們的主文件夾名稱,如果這是任何幫助。在目標C中將相對URL更改爲絕對URL C

請幫幫忙,

HiGuy

+4

與你的問題沒有直接關係,而是一個建議。作爲一名Mac用戶,當應用程序需要生活在一個特殊的文件夾結構中時,我會發現它很粗魯。我希望能夠將一個.app文件拖入我的/ Applications文件夾並完成。我更喜歡支持文件進入/ Library/Application Support或〜/ Library/Application Support。你的情況可能需要一個不同的解決方案,但首先看看你是否可以遵守這個標準。 – 2010-01-23 17:37:44

+0

@DanielYankowsky - 我可以看到你的觀點,但是在主包中放置對用戶不可見的支持文件實際上是可取的......它更容易刪除應用程序及其相關的碎片,以及仍然允許應用程序文件自己重新定位。創建支持結構(即使在「適當」的地方)也會在卸載時留下垃圾。現在,用戶特定的數據是另一回事,〜/ Library/...可能是適合這種類型的東西。 – BadPirate 2015-03-26 19:48:48

+0

@BadPirate最初的文章似乎沒有問如何從* .app目錄中的*獲取資源文件,而是如何獲得文件路徑* * .app目錄。這就是我所推薦的。 – 2015-03-27 15:19:32

回答

1

找出正在運行的應用程序的位置,這樣做:

NSString * applicationPath = [[NSBundle mainBundle] bundlePath]; 

這將返回類似:

/Users/myUser/Library/Application Support/iPhone Simulator/User/Applications/317CF5C7-57B3-42CE-8DF4-4DD10B070D95/Assignment1a.app 

然後使用- (NSString *)stringByDeletingLastPathComponent砍掉最後一位。

1

你應該只能夠來連接應用程序的根文件夾,相對路徑。你可以在應用程序的home目錄。NSHomeDirectory(),所以讓你可以做這樣的事情的絕對路徑如下:

NSString *path = [NSHomeDirectory() stringByAppendingString: @"/Data/file.txt"]; 
+0

與你的答案沒有直接關係,但NSHomeDirectory()實際上給了我「/ Users/MyUserName /」而不是(應用程序的路徑)。相反,我使用NSHomeDirectory()來自動獲取主目錄,而不使用NSTextField。 – 2010-01-27 02:48:37

14

我會用NSURL方法是解決網址對我來說,就像這樣:

NSURL * bundle = [[NSBundle mainBundle] bundleURL]; 
NSURL * file = [NSURL URLWithString:@"../Data/file.txt" relativeToURL:bundle]; 
NSURL * absoluteFile = [file absoluteURL]; 

的「../」是必要的,否則它會嘗試找到裏面文件您應用程序包。事先放入「../」會告訴它查看包的包含文件夾,而不是查看包本身。另外,-[NSBundle bundleURL]是一個10.6+ API,但使用便利方法和-[NSBundle bundlePath]複製功能很簡單。