• ベストアンサー

ファイル書き込み時のファイル名について

Cでコンソールアプリケーションを作っています。 ファイルにデータを書き込む時に、ファイルポインタを使ってファイルを開きますよね。たとえば、下のような感じで。 fp = fopen("./hogehoge.txt","w") このとき、hogehoge.txtに当たる部分をプリプロセッサのマクロなどを使って変更することはできるのでしょうか? 毎回下のほうまでスクロールするのが非常に煩わしいのですが…。 分かる方いらっしゃいましたら、よろしくおねがいします。

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

  • ベストアンサー
  • KamoPlat
  • ベストアンサー率46% (23/50)
回答No.2

プリプロセッサでなくても、別に変数でもいいですけど #define OUTPUT_FILENAME "./hogehoge.txt" /* いろいろ処理…… */ fp = fopen(OUTPUT_FILENAME , "w"); でしょうか? あ、入れ替えなら「#ifdef」使ってくださいね。

funifuni11
質問者

お礼

なるほど、このようにやらなければいけないんですね。 助かりました。ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

#1> "./FILENAME" は、うまくないです。 てか、これが置き換えられるようでは、反って困る場合が多いと思います。 #2でも書かれているけど #define FILENAME "./hogehoge.txt" として、 fp = fopen(FILENAME,"w"); でいいと思います。 あと、 "./hogehoge.txt" は、単に "hogehoge.txt" でいいと思うけど

funifuni11
質問者

お礼

ありがとうございました。 おかげさまで助かりました!

すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

できます

funifuni11
質問者

補足

回答ありがとうございます。 とりあえず、 #define FILENAME hogehoge.txt として、 fp = fopen("./FILENAME","w") とやってみたのですが、うまくいきません。 " "でかこまれた部分には効かないんでしょうか?? たびたびすみませんが、よろしくお願いします。

すると、全ての回答が全文表示されます。

関連するQ&A

  • fwriteで書き込み

    やりたいことは・・・下に書いていきます。 何がおかしいのか教えてください。 $fp = fopen("example.txt", "r+"); fopenでexample.txtを読み書き可能で開きます。 返り値はポインタですよね。 $fseek = fseek($fp, -3, SEEK_END); $fpで開いたexample.txtのポインタを、ファイルの最後尾から3バイト戻したつもりです。 返り値は 0 成功 -1 失敗 $ftell = ftell($fp); で、今のポインタの位置を確認します。 返り値はポインタ。 fwrite($ftell,$write); $writeの内容を、example.txtの最後から3バイト戻ったところへ書き込み・・・のつもりなのですが。 専門分野ではありませんので、調べてもなかなか進まないです。 ご教授お願いします。

    • ベストアンサー
    • PHP
  • fopenの追記モードについて

    宜しくお願いします。 fopenで追記モードでファイルを追記するとき、 FILE *fp; fp = fopen("hogehoge.txt", "a"); fprintf(fp, "aaa\n"); fclose(fp); fopen("hogehoge.txt", "a"); fprintf(fp, "bbb\n"); fclose(fp); と毎回ファイルを開きなおすと、出力結果が bbb aaa となってしまうのですが、 aaa bbb と出来ない物でしょうか?

  • 同時にファイル読み込み 書き込み

    現在、ヒストグラムのプログラムを作成しています。 まず0~255の1000個の乱数ファイルdata.txtを読み込み、 ヒストグラムは出来たのですが、 エクセルでグラフを作りたいので、 data1.txtに書き込みたいので、下のソースでやってみましたが、 0~255のカウントが全部0になってしまします。 fp = fopen("data1.txt","w");が無ければ正常に処理されます。 どうか教えてください。よろしくお願いします。 #include <stdio.h> #define BUF 10 #define MAX 256 void count(FILE *fp , int* counter); int main(void) { FILE *fp; fp = fopen("data.txt","r"); fp = fopen("data1.txt","w"); int counter[MAX]; int i; for(i=0 ; i<MAX ; i++) { counter[i] = 0; } count(fp , counter); for(i=0 ; i<MAX ; i++) { printf("%d %d\n" , i, counter[i]); } fclose(fp); return 0; } void count(FILE* p_file , int* counter) { char buf[BUF]; while (fgets(buf , BUF , p_file) != NULL) { int n; sscanf(buf , "%d" , &n); counter[n]++; } }

  • ファイルの書き込みについて

    ファイルの書き込みに関する質問です。 下のコードでは、 3行目「$ptr=fopen("kekka.txt", "w"); //ファイルを開く」 に問題があるというエラーが出ます。 しかし、文法的には問題はないと思うのですが・・・。 サーバーには、"kekka.txt"というファイルが置いてあります。 何かアドバイスがありましたら、よろしくお願いいたします。 <?php $x = "こんにちは";  $ptr=fopen("kekka.txt", "w");   //ファイルを開く    flock($ptr, LOCK_EX);      //ファイルをロックする      fputs($ptr, $x);      //書込む    flock($ptr, LOCK_UN);       //ロックを解除する  fclose($ptr);            //ファイルを閉じる ?>

    • ベストアンサー
    • PHP
  • 連続したファイル名を作成する方法を教えてください

    プログラムを作成しています。 一つだけのファイルにデータを出力するのであれば fp = fopen("temp.txt", "w"); と宣言すればよいですが、 今、 001.txt 002.txt * * * 100.txt と言うぐらいに大量のファイルを作成する必要があります。 この場合どのようにしたらよいでしょうか?

  • fopen関数

    いまいちfopen関数の使い方がわかりません。 FILE *fp; fp = fopen("test.txt","W"); fcose(fp); ですが、なぜここでポインタが出てくるんでしょうか? メモリ上に領域fpを作って、そこに関数のアドレスを格納している? と一応解釈していますがあっていますか?

  • ファイル名を複数個配列で確保したいときどうすればいいですか?

    int i; FILE *fp[5]; //ここの宣言がわかりません char *(filename[5])={"1.txt","2.txt","3.txt","4.txt","5.txt}; for(i=0;i<5;i++) fp[i]=fopen(filename[i],"w"); のようなことをしたいのですが、ファイル名を複数個配列に格納するにはどのようにしたらいいんでしょうか? 回答お願いします。

  • 新しいファイルの書き込み ファイルができたり/出来なかったり 

    $fp3 = fopen("ent.txt,"w"); とオープンして fputsで書き込み fclose("ent.txt"); でクローズしています このプログラムをlocalhost/a.phpとかで実行すると 出力されるはずの、ent.txtファイルが exploreで見えないのです IEの更新ボタン(再実行?)を押すと ent.txtが見えます WindowXPにApacheとphpをインストールして 実行しています またこのルーチンを関数化して外部ファイルに置き 実行する時に、includeでもってくるように 変えましたが、ロジック上は問題ないと 思うんですが よろしくお願いします

    • ベストアンサー
    • PHP
  • ファイルに書き込む時の負荷について

    PHPバージョン5.2.4を使っています。 次のような // ------------------------------------ $fp = fopen("data.txt", "w"); $buf = ""; for ($i = 1; $i <= 3; $i++) { $buf .= "aaa$i\n"; } fwrite($fp, $buf); fclose($fp); // ------------------------------------ という変数にいったん保存してから書き込む場合と // ------------------------------------ $fp = fopen("data.txt", "w"); for ($i = 1; $i <= 3; $i++) { $buf = "aaa$i\n"; fwrite($fp, $buf); } fclose($fp); // ------------------------------------ というその都度ファイルに書き込む場合とでは どちらが良い悪いというのはあるのでしょうか? たとえばこちらのやり方は負荷がかかるなど ループが多くなっていった場合に違いがでてくるのでしょうか?

    • ベストアンサー
    • PHP
  • ファイル名を任意の名前に作成する方法

    計測器からのデータを取得してテキストファイルに書き込みたいのですが、 1)ファイル名を取得された時刻にしたいのですがどのようにしたらいいのでしょうか?fp=fopen("D:\\trace.txt","w");中のtraceの所をかえたいです。 時刻は日時の関数を使えばいいと思いますがファイル名をどのようにしたらよいか・・・ 2)計測器から取得されるデータを時間ごとにファイルを作成したいのですがどのようにしたらいいのでしょうか?あらかじめファイルポインタを用意しておくと膨大の数が必要となってしまうのでどうしたらよいか・・・ 3)仮に時間ごとに作成したファイルを読み込むにはどうしたらよいでしょうか? 例えばfp=fopen("D:\\2008_01_12:00","r");のように直接パスを入力すれば読み込めると思いますが任意のファイル名だといまいち分からないです。

このQ&Aのポイント
  • ThinkCentre neo 50q Tiny Gen 4のm.2ssdを交換した際に、発熱が気になるためヒートシンクを装着しようと考えています。
  • 狭いスペースに装着する必要がありますが、どのくらいのヒートシンクまで使えるのか知りたいです。
  • Lenovo製のデスクトップPCであるThinkCentre neo 50q Tiny Gen 4のm.2ssd交換後のヒートシンクの最大許容範囲について教えてください。
回答を見る

専門家に質問してみよう