• ベストアンサー

ファイルオープン&ファイルクローズ

 C言語でデータの種類ごとにディレクトリーを用意し、データを振り分けたいのですが。。  fopenすると同じディレクトリーでしかファイルを呼び出したり、保存したりしかできないですよね。ちがうディレクトリーのファイルの呼び出し、ファイルの保存は出来ないでしょうか?また、ディレクトリーの作成なんてことは、C言語ではできないでしょうか?  誰か知っている人がいましたら、よろしくお願いします。

  • Nickee
  • お礼率79% (107/134)

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

  • ベストアンサー
  • sueoka
  • ベストアンサー率38% (24/62)
回答No.1

ディレクトリの作成は「_mkdir」と言う関数が用意されています。 Cのヘルプで「_mkdir」をキーワードに検索してみて下さい。 fopenは同じディレクトリでしか操作できない ・・・と言うのがちょっと分からないんですが、 fopen("dir1\\file.txt", "w")とすれば、 exeファイルと同じディレクトリに存在する「dir1」フォルダの中に 「file.txt」と言う名前のファイルを作成します。 また、fopen("../data.dat", "w")とすれば、 exeファイルの一つ上のディレクトリに 「data.dat」と言う名前のファイルを作成します。 もちろん、絶対パスを使う事も出来ます。 例)fopen("C:\\dir1\\dir2\\sample.ini", "w") 質問の回答になっているかどうか分かりませんが、 こんなのでどうでしょう?

Nickee
質問者

お礼

>また、fopen("../data.dat", "w")とすれば、 exeファイルの一つ上のディレクトリに 「data.dat」と言う名前のファイルを作成します。 もちろん、絶対パスを使う事も出来ます。 例)fopen("C:\\dir1\\dir2\\sample.ini", "w") こういう使い方を知らなかったので。。 非常に助かります。ありがとうございました。

その他の回答 (1)

  • ahsblue
  • ベストアンサー率58% (23/39)
回答No.2

sueokaさんの回答のとおりですが、一応、UNIX版だと以下のとおりです。 「ディレクトリ作成」 mkdir("作りたいディレクトリ名"); 「ファイルオープン」 FILE fp; fp = fopen("ファイル名","r"); /* 読み込みの場合 */ 質問内容を見ますと、絶対パス、相対パスをよく理解されていないのでは?と思いました。念のため書いておきます。 ●絶対パス:ディレクトリの先頭(UNIXならルート、Windowsならドライブ)から最後まで全部書く方法 ●相対パス:実行ファイルと同じディレクトリを基準にする方法(正確にはカレントディレクトリを基準にします。カレントは変更可能)。1つ上のディレクトリを示すには、 ../ と書きます。 例)実行ファイルの1つ上のabcというディレクトリのdef.txtを追加モードでオープンする。 fp = fopen("../abc/def.txt","a"); 補足は以上です。がんばってください!

Nickee
質問者

お礼

 >fp = fopen("ファイル名","r"); /* 読み込みの場合 */ ファイル名のところは、ファイル名しか入れられないのかと思っていたので、 >fp = fopen("../abc/def.txt","a"); このような使い方ができるとは知りませんでした。 ありがとうございました。ポイントはどちらにも、多くやりたいのですが、そうもいかないので、早いもの順ってことで。ありがとうございました。

関連するQ&A

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

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

  • UNIX上でのファイルopenについて

    C言語で同一ディレクトリから複数のファイルを順番に読み込んでいきたいのですが、うまくいきません。 シェルで、ファイル名の取得を行っていっています。 shell ---- ls /home/data > /home/src/infile.txt ---- C ----------------------------- FILE *fp; char y[30]="/home/data/"; // ↓aには上記シェルにて取得した1件目のファイル名が入っています。 strcat(y,a); // ↓ここでは絶対パスが正しく表示されます printf("ddd:%s\n",y); // ddd:/home/data/11.txt // ↓ここでfile open errorで一件目で終了してしまいます。 if ((fp = fopen(y,"r")) == NULL){ printf("file open error!!\n"); exit(1); } ----------------------------- このようなファイルの読込みのやり方ができるのか教えてください。 もしできるのであるのなら、そのやり方も教えてください。 わかりにくい文章ですが、お願いします。

  • fopenでファイルがオープンできません

    $fp = fopen(TEST_FILE, "w") としてオープンしようとすると Warning: fopen(mybasic9.txt): failed to open stream: No such file or directory と、オープンしようとしたファイルがない、と出ます そして、そのファイルをあらかじめ作っておくと OKです。 しかし fopen(TEST_FILE, "w") は該当ファイルがあればそれをオープンし 無ければ、新しく作成する、とFopenの仕様に出ています。 これは、今使っているサーバーの問題でしょうか 何か、避ける方法はないでしょうか よろしくお願いします

    • 締切済み
    • PHP
  • C言語でCSVファイルのオープン・クローズができな

    C言語でCSVファイルのオープン・クローズができない。 下記のプログラムですが、CSVファイルが読み込めません。 どのようにすれば読み込めるのでしょうか。よろしくお願いいたします。 #include <stdio.h> int main(void) { FILE *fp; fp = fopen("aaa.csv","r"); if (fp == NULL) printf("ファイルを開けません。"); else { fclose(fp); } return(0); }

  • サーバー内のファイルは、public_html配下でないとだめ?

    サーバー内にファイルを保存するテストプログラムを 作成しています。 C:┬public_html ←公開用 │ └Temp     ←非公開 公開したディレクトリ配下にファイルを保存する事は できるのですが、非公開のディレクトリに保存すると アクセスできないとエラーが出力されます。 テキストファイル等スクリプト中で作成されるファイ ルは、公開されているディレクトリ配下でないといけ ないのでしょうか? もし公開されいているディレクトリ配下の場合、皆さ んはどのようにアクセスされないように対策している のでしょうか? -----テストプログラムです。----- <?php // OK // $filename = "moji.dat"; // NG // $filename = "C:\Temp\moji.dat"; $str = "文字列"; $fp = fopen($filename,"w"); fputs($fp, $str); fclose($fp); $fp = fopen($filename,"r"); $str = fgets($fp, 512); fclose($fp); print("$str"); ?> -----テストプログラムです。-----

    • ベストアンサー
    • PHP
  • 大きいファイルのオープンでエラー?

    LINUX用ボーランドC++Builderなんですが。 fopen で3.7ギガのファイルを読もうとすると、 fp = fopen( file_path, "r+b" ) fpにnullが入りうまくいかないのですが、どうにかならないでしょうか?当然、小さいファイルは読めます。

  • ファイル(データ)のコピー

    C言語初心者です。 昨年末、C言語の講習時に友人に「例えば100Kくらいのテキストファイルを とあるメモリにコピーする場合、ファイル単位でコピーするのと バイナリ単位でコピーするのはどっちが早いでしょう~?」みたいな ことを言われました。 考えてもよく分からなかったので、実際にコーディングをして実行時間を 計ってみようと思ったのですが、ファイル単位とバイナリ単位でデータを コピーするには具体的にどのようにしたらよいのでしょうか? fopenでテキストファイルをオープンして内容を読み込み、 読み込んだデータをfopenで新規ファイルへ書き込む。 この方法だと、バイナリ単位ということになるのでしょうか?

  • flash ac3.0のファイル読み込みについて。

    flash ac3.0のファイル読み込みについて。 現在Flash作成のためActionScript3.0を学習中ですが、 非常に困ったことがあります。 例えばC言語やPHPなどどの言語でもファイル操作として、 指定のディレクトリ情報を取得できるための仕組みは ありますが、as3にはこの機能が無いのでしょうか? 直近でやりたいことが、 http://coliss.com/articles/build-websites/operation/design/1266.html このサイトにある様な写真ギャラリーを作りたいと思ってます。 特定のimgフォルダにjpg画像を(ファイル名などは特に気にせず) 放り込んでおけばfopenの様な関数でそのディレクトリの ファイル一覧を取得して、これを一枚ずつ読み込み・・・ ということをしたいと考えております。 しかしこの手の情報を探せど探せどまったく出てきませんで 大変困っております。 これを作らないと会社で痛み付けられてしまいますので、 なにとぞどなたかお助けください。。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • 連続でファイル作成

    連続でファイル作成 最終的にパラパラアニメの要領でアニメーションを作ろうと考えています。 そこで、C言語でfor文を使ってたくさんのファイルを作成することを考えました。 そこで質問なのですが、ファイル名を少しずつ変える方法はどうしたらいいのでしょうか? 最初、for文中に fd = fopen("test%d.txt",i,"w"); と書いてみたのですが、『too many arguments to function ‘fopen’』とエラーが出ました。 (もちろん整数iはi++でfor文中に入れてあります。つまり、test1,test2,...,test10のようなテキストファイルを作成したかったという意味です。) C言語を始めたばかりなのでとても初歩的な質問かと思いますが、わかる方どうぞよろしくお願いいたします。

  • AVIファイルのヘッダーの大きさ

    AVIファイルを読み込んでRGBを分割し、それぞれを別々のRAWファイルに保存するC言語プログラムを作成中です。このプログラムを書くのに必要なAVIファイルのへっだーファイルの大きさと画像間のデータの大きさを教えてください。

専門家に質問してみよう