Xcode(C++)で、設定ファイル(test.txt)を読み込むプログラムを作成しています。
困っているのは、できあがった実行ファイル(test.app)と同じディレクトリにその設定ファイルを置いて、test.appをダブルクリックで実行しても、設定ファイルを読み込めないでいます。(VC++ではできたのですが)
もちろん、明示的にtest.txtのパスを下記のソースで指定すれば読み込めます。実行する場所が毎回決まっていないので、カレントディレクトリ内のファイルが読み込めるようにしたいです。
ソースは以下のように書いてます。
Xcode側で何か設定とかがあるのでしょうか?
どなたかご存知の方がいらっしゃいましたらご教授のほどよろしくお願いいたします。
※test.appの場所は、"プロジェクト名/build/Debug/test.app" です。
--------------------------------------------
void main(){
FILE* fp;
char s[256];
char *filename = "test.txt";
fp = fopen(filename, "r");
if( ! fp){
printf("ファイルオープン失敗"); // ここに入る
return;
}
while (fgets(s, 256, fp) != NULL) {
// test.txt を読み込む処理
(中略)
}
(中略)
}
No.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に戻る)
返答が遅れ申し訳ありません。
出張に行っていて、連絡が遅れてしまいました。
教えていただいた通り、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が、実はフォルダだったということを
教えて頂き、すごく前進できたと思いますので、これ以上ご迷惑をお掛けできませんので、あとは
自力で解決してみます。
本当に有難うございました。
No.2
- 回答日時:
これ、実際にはappのdirじゃなく、その中で起動してるbinのdirがカレントになってるんじゃない?
カレントがどこになってるか確認してみたら良いよ。
デバグ中だとbinの場所がカレントになってて問題なく開くだろうけどapp化したときに位置が変わっちゃうからね。
この回答への補足
早々のご返答ありがとうございます。
すみません、よく理解できなかったのですが、appの中で起動しているbinのディレクトリの存在はどのように確認したらよいのですか。
なお、デバック中は確かに問題なく上記のコードで読み込めるのですが、設定ファイルの場所は、binの場所ではなく、実行ファイルと同じディレクトリ("プロジェクト名/build/Debug/test.txt")に置いてあります。これは、デバック中は、binディレクトリに設定ファイルがあるという事ですか。
何卒、宜しくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- その他(プログラミング・Web制作) VScodeでpythonプログラムの関数を実行したい 2 2022/07/13 19:24
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- ドライブ・ストレージ HDDのチェック方法 6 2022/05/04 09:49
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/06 13:01
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/03 13:18
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチファイル内置換
-
Mac OS ventura のapplescript...
-
スタートアップスクリプトを実...
-
USBメモリ内のバッチで書き出す...
-
ソフトのインストール場所って...
-
Macの手書き漢字入力ツールにつ...
-
VB6 二重起動確実防止について
-
誰かにサーバにあるデータを消...
-
ご教授願います PC初心者です。...
-
cygwinでno such file or direc...
-
バッチファイルで多重起動を防ぐ
-
aptでインストールしたプログラ...
-
scriptコマンドで出力したログ...
-
".bashrc" E509: バックアップ...
-
centOS7サーバーに配置したHTML...
-
アプリケーションをインストー...
-
コンソールアプリの起動結果待...
-
tcsh(v6-11)で文字化けする問題
-
大塚商会で新しくシステム、ス...
-
フロッピーディスクの読み込み方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチファイル内置換
-
exeファイルの実行結果をテキス...
-
コマンド実行結果のファイル出力
-
USBメモリ内のバッチで書き出す...
-
batが動かない
-
batファイル 行った履歴をテキ...
-
【Mac/Xcode】カレントディレク...
-
メーリングリスト宛てのメール...
-
ftpのgetが正常できる方法について
-
PowerShellで自分が書いたコマ...
-
C言語コンパイラ・デバッガをご...
-
ldapユーザ登録について
-
デバッグ停止中 一つ戻る
-
Win7でコンピュータ名変更を自動で
-
cron で rsync が実行できない
-
VBSでのファイル読込、出力操作...
-
linuxのsshの反応が非常に遅い。
-
プログラムでTAを制御するコマ...
-
pythonで業務効率
-
linux勉強中の質問です。
おすすめ情報