• ベストアンサー

fopenで別ディレクトリにファイルをオープンしたい

 LinuxでC言語のプログラムを作っています。書き込みでファイルをオープンする際に、別のディレクトリにファイルを作成したいのです。しかし普通にターミナルの上でやるような指定の仕方だとうまくいきません。  以前にWindows環境でfopenの際のパス指定の質問があったみたいですが、Linuxではどのように指定したらいいでしょう…?よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.1

fopenで指定するファイル名は、絶対パス指定と相対パス指定の何れかで行います。 ファイル名を"file"としたとき、 "/aaa/bbb/file"が絶対パス指定です。 相対パス指定は "file"又は"./file"となります。 これはwindowsの "c:\\aaa\\bbb\\file" "file"に相当します。 絶対パス指定で別のディレクトリに"file"を作成したい場合、別のディレクトリが/aaa/bbbであると仮定すると "/aaa/bbb/file"がfopenで指定するファイル名となります。 相対パス名で指定方法については、現在自分がどこにいるか(どのディレクトリで実行するか)が、問題になります。 絶対パス指定で通常は問題ないので、この方法で行って下さい。どうしても相対パス名で指定したい場合は、その旨補足して下さい。

yemd
質問者

お礼

回答して下さってありがとうございます。何とか解決しました。しかし、まだわからないところがあります。今作っているプログラムを動かすことはできますが。 カレントディレクトリにTESTというディレクトリを作り、その中でfileIOというファイルをオープンさせようとしました。今回、「./TEST/fileIO」 と指定し、無事うまくいきました。しかし、絶対パスを用いるとファイルオープンを失敗してしまいます。「/home/aaa/TEST/fileIO」など。この書き方はおかしいんでしょうか…?

その他の回答 (2)

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.3

>今回、「./TEST/fileIO」 と指定し、無事うまくいきました。しかし、絶対パスを用いるとファイルオープンを失敗してしまいます。「/home/aaa/TEST/fileIO」など。この書き方はおかしいんでしょうか…? 書き方は正しいです。問題は、"/home/aaa/TEST"が正しいディレクトリ名かということになります。 「./TEST/fileIO」でうまくいったとういことは、カレントディレクトリは、"/home/aaa"とうことになりますが、 これは、正しいでしょうか。pwdコマンドでカレントディレクトリが表示されますので、それで確認してみて下さい。

yemd
質問者

お礼

今確認してみたところ、絶対パスでも出来ました。おそらくコピペのミスだったと思われます。 回答いただいてありがとうございます。No.2の方も、どうもありがとうございます。助かりました。

yemd
質問者

補足

No.2の方に返事したとおりディレクトリはコピーペーストなのでおそらく間違ってません。まあ、スペースだとかファイル名の一部だとかいらない部分まで貼り付けてしまったのかもしれませんね。今ちょっと確かめられない状況ですが、後で確かめてみたいと思います。 回答してくださってありがとうございました。

  • ganzou
  • ベストアンサー率29% (25/85)
回答No.2

カレントディレクトリが間違っている可能性があります。 #include <unistd.h> #include <sys/param.h> char buf[MAXPATHLEN]; getcwd(buf,sizeof(buf)); printf("カレントディレクトリ=%s\n",buf); などとやってカレントディレクトリを表示させ、間違っていたら //#include <unistd.h> chdir("/home/aaa"); とやって、カレントディレクトリを変更します。

yemd
質問者

お礼

ありがとうございます。カレントディレクトリは、合っているんですよね…なにせコピーペーストで指定しましたから。何でだろ…?

関連するQ&A