アプリケーションのディレクトリ(.appと同じフォルダ)にあるファイルを取得して、その絶対パスを取得するにはどうすればよいですか。相対パスが「Data/file.txt」であるとすると、Objective Cを使用してそれを絶対パスとして取得するにはどうすればよいですか?それが助けになるなら、私はユーザーに彼らのホームフォルダ名を入力してもらいます。
助けてください、
HiGuy
アプリケーションのディレクトリ(.appと同じフォルダ)にあるファイルを取得して、その絶対パスを取得するにはどうすればよいですか。相対パスが「Data/file.txt」であるとすると、Objective Cを使用してそれを絶対パスとして取得するにはどうすればよいですか?それが助けになるなら、私はユーザーに彼らのホームフォルダ名を入力してもらいます。
助けてください、
HiGuy
NSURL
次のように、URL を解決するメソッドを使用します。
NSURL * bundle = [[NSBundle mainBundle] bundleURL];
NSURL * file = [NSURL URLWithString:@"../Data/file.txt" relativeToURL:bundle];
NSURL * absoluteFile = [file absoluteURL];
「../」が必要です。そうしないと、アプリ バンドル内のファイルを見つけようとするからです。事前に「../」を配置すると、バンドル自体ではなく、バンドルを含むフォルダーを調べるように指示されます。また、-[NSBundle bundleURL]
は 10.6 以降の API ですが、NSURL
便利なメソッドとを使用して機能を複製するのは簡単-[NSBundle bundlePath]
です。
次の手順を実行して、実行中のアプリの場所を見つけます。
NSString * applicationPath = [[NSBundle mainBundle] bundlePath];
これは次のようなものを返します:
/Users/myUser/Library/Application Support/iPhone Simulator/User/Applications/317CF5C7-57B3-42CE-8DF4-4DD10B070D95/Assignment1a.app
次に、を使用- (NSString *)stringByDeletingLastPathComponent
して最後のビットを切り取ります。
アプリのルートフォルダーを相対パスで連結できるはずです。NSHomeDirectory()を使用してアプリのホームディレクトリにアクセスできるため、絶対パスを取得するには、次のようにします。
NSString *path = [NSHomeDirectory() stringByAppendingString: @"/Data/file.txt"];