- ベストアンサー
【Mac/Xcode】実行ファイルと同じディレクトリのファイルを読み込む方法
- Xcode(C++)で、実行ファイルと同じディレクトリに配置されたファイルを読み込む方法について教えてください。
- test.appと同じディレクトリに配置された設定ファイル(test.txt)を、Xcodeで作成したプログラムで読み込む方法を教えてください。
- Xcodeでtest.appを実行するときに、設定ファイル(test.txt)を自動的に読み込めるようにする方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
通常のCやC++の作成環境だと普通は a/ test.c …ソース test.o …コンパイル済 test.a …リンク済実行形式 って形で実行形式が生成されるので aディレクトリに test.txt を入れてあれば読める ここまでは理解できてると思うんだけど MacOSXのアプリはここが判りにくい 多分こうなるんじゃないかな a/ test.c …(他のファイル省略)… test.app/ そう、finder上ではファイルに見えているんだけどappは実はフォルダ。 appを右クリック(ctrl+クリック)して「パッケージの内容を表示」ってやってごらん。(ターミナル上でcdで辿っても構わない) 辿っていくと最初に書いた「test.a」に相当するファイルが奥深くで見つかる筈だから。(よく見るアプリは拡張子無しまたは"-bin"というのが付いている) だから起動された位置と実際のバイナリが駆動している位置が違うって話(No2に戻る)
その他の回答 (2)
- SAYKA
- ベストアンサー率34% (944/2776)
これ、実際にはappのdirじゃなく、その中で起動してるbinのdirがカレントになってるんじゃない? カレントがどこになってるか確認してみたら良いよ。 デバグ中だとbinの場所がカレントになってて問題なく開くだろうけどapp化したときに位置が変わっちゃうからね。
補足
早々のご返答ありがとうございます。 すみません、よく理解できなかったのですが、appの中で起動しているbinのディレクトリの存在はどのように確認したらよいのですか。 なお、デバック中は確かに問題なく上記のコードで読み込めるのですが、設定ファイルの場所は、binの場所ではなく、実行ファイルと同じディレクトリ("プロジェクト名/build/Debug/test.txt")に置いてあります。これは、デバック中は、binディレクトリに設定ファイルがあるという事ですか。 何卒、宜しくお願いいたします。
char *filename = "./test.txt"; とすれば良いのではないでしょうか。
お礼
早々のご返答ありがとうございます。 試してみたのですが、結果は同じで読み込む事ができませんでした。
お礼
返答が遅れ申し訳ありません。 出張に行っていて、連絡が遅れてしまいました。 教えていただいた通り、test Debug.appの中身を見ようと右クリックしたら 「パッケージの内容を表示」という項目があったので、選択してみたところ 中身が表示されました。(appがフォルダだったなんて知りませんでした) 中身は... 0)Contents(フォルダ) ------------------- 1) Info.plist(XML Property List File) ------------------- 2) MacOS(フォルダ) ------------------------------・test Debug(Unix実行ファイル(Intel)) // ←これが実行ファイルですね。 ------------------- 3) PkgInfo(書類) ------------------------------・Resources(フォルダ) ------------------------------・English.lproj(フォルダ) -------------------------------------・InfoPlist.strings(ストリングファイル) -------------------------------------・main.nib(Interface Builder Document) ************************************************************** そして、2)のMacOSの実行ファイルと同じところに、例の設定ファイル(test.txt)を おいて実行してみました。(念のため、0,1,3の場所にもおいて試して見ました) test Debug.appは、パッケージなので、test Debug.appをダブルクリックで実行しました・・・ 結果は、ダメでした。 プログラム内での、test.txtのパスの指定の仕方がきっと間違っているんだと思います。 最初に書きました「char *filename = "test.txt";」だと無理なのですかね。 (どうゆう書き方で、指定すれば設定ファイルを読み込むんだろう?相対パス,絶対パスとかは 関係ないですし。) これで、ダメなら実行ファイルのカレントディレクトリを取得してくるしかないような気が しています。 Macなので、WinAPIの "GetCurrentDirectory()"などは使えないですし。 とにかく、SAYAKAさんには、実行ファイルと思っていたappが、実はフォルダだったということを 教えて頂き、すごく前進できたと思いますので、これ以上ご迷惑をお掛けできませんので、あとは 自力で解決してみます。 本当に有難うございました。