• ベストアンサー

fopen(ファイルパス)

いつもお世話になっております。 現在ファイルの作成、入力について勉強しています。 FILE *maketxt; maketxt = fopen("C:\~\~\~.txt",w+); 上の状況でファイルの作成は出来るようになりましたが、 更にファイル名をfopen関数の外に定義したいと思っています。 というのもファイル名にタイムスタンプを入れたいためで、ためしに以下のようにやってみてもできませんでした。(タイムスタンプに関しては事前にlocaltime関数で定義済み) fprintf(text,C:\~\~\%d.txt,tm_sec); maketxt = fopen("text",w+); うまい書き方をご存知の方、ご教授お願いいたします。

noname#147649
noname#147649

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

  • ベストアンサー
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.2

関数と文字列の使い方が間違ってます。 fprintfはファイルに文字列データを書き出すための関数。要するにテキストファイルを作成するための関数です。 No.1さんの様に書くのが正解です。 注意点を幾つか。 1.C:\~\~\%d.txt 文字列なら"で囲まないとダメ。 \マークはエスケープなので、\を文字としたいときは\\と書く。 なので、文字列に関して復習をしたほうが良いですよ。 2.変数と文字列の出鱈目。 fprintf(text,C:\~\~\%d.txt,tm_sec); maketxt = fopen("text",w+); これを見るとtextは変数名。"text"は文字列ですが同列に扱っている様に見えます。変数の型と定数の型の復習をしましょう。 あとは関数の FILE *fopen( const char *filename, const char *mode ); と書かれているプロトタイプの意味を理解する必要があります。 3.tm_secは秒だけだけど良いの? 本当は、日時にしたいのでは?

noname#147649
質問者

お礼

詳しくありがとうございます。 型についていまいち理解しきれておらず…まだまだ勉強不足です。 1はこちらに書く際の記述ミス、3は記述を簡略するためあえて秒だけ記述しました。別場所でYYYYMMDDhhmmssに変換しているので大丈夫です。

その他の回答 (5)

  • chie65535
  • ベストアンサー率43% (8526/19383)
回答No.6
noname#147649
質問者

お礼

ご紹介ありがとうございます。

  • kent85
  • ベストアンサー率52% (38/73)
回答No.5

標準で用意されてるのに perror() というのがあります。 エラーメッセージが出てくれますので試してみてください。 maketxt = fopen(省略); if(makeext == NULL) { /* エラーだよ */  perror("fopen error ... why? : ");  /* return -1; とかなんとか */ }

noname#147649
質問者

お礼

そんな関数もあるのですね。ありがとうございます。 今後使ってみたいと思います。

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.4

>maketxt = fopen("C:\~\~\~.txt",w+); >maketxt = fopen("text",w+); fopen()の第2引数の方が合わないのでコンパイルエラーかと。 そのまえに変数wがあるか…というのもありますが。 # 単なる記述ミス…でしょうけどね。

noname#147649
質問者

お礼

こちらへ記述する際のミスです、すみません。 maketxt = fopen("C:\~\~\~.txt","w+"); と書くべきですね。 ご指摘ありがとうございます。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

ちなみに, しばしばパスの区切りは / でよかったりします.

noname#147649
質問者

お礼

豆知識ありがとうございます。 ぜひ使ってみます!

回答No.1

Cはあまりやらないので自信はありませんが、fprintfの使い方を間違っていると思います。 char filepath[256]; sprintf(filepath, "C:\\~\\~\\%d.txt", tm_sec); maketxt = fopen(filepath, "w+");

noname#147649
質問者

お礼

ご指摘ありがとうございます。 fprintfやらfwprintfやらsprintfやら…出力の関数がたくさんあってわからなくなってしまいます; 教えていただいたとおりにやるとうまくできました!

関連するQ&A

  • fopen関数

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

  • fopen用の関数を作りたいです。

    #include<stdio.h> void F_open(FILE *fp); main(){ FILE *fp; F_open(fp); fprintf(fp,"aaa\n"); } void F_open(FILE *fp){ fp=fopen("aa.txt","w"); } とすると、ファイルオープンはできるのですが >fprintf(fp,"aaa\n"); で書き込もうとしたときにエラーになってしまいます。 解決策を教えていただきたいです。

  • 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 と出来ない物でしょうか?

  • 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
  • 連番のファイルを何個も開きたい

    FILE *ab_1,*ab_2,*ab_3,*ab_4,*ab_5,*ab_6,*ab_7,*ab_8,*ab_9,*ab_10,*ab_11,*ab_12,*ab_13,*ab_14,*ab_15,*ab_16; ab_1=fopen("1.txt","w"); ab_2=fopen("2.txt","w"); ab_3=fopen("3.txt","w"); ab_4=fopen("4.txt","w"); ab_5=fopen("5.txt","w"); ・ ・ ・ ab_15=fopen("15.txt","w"); ab_16=fopen("16.txt","w"); という作業をfor文で回せるようにしたいのですがどうしたらいいでしょうか? 自分で作ってみたのは #include<stdio.h> main() { int i; char buf[256],file_name[256]; for(i=0;i<16;i++){ sprintf(buf,"ab_%d",i); sprintf(file_name,"%d.txt",i); FILE *buf; buf = fopen(file_name,"w"); } fprintf(ab_1,"test\n"); } とやってみたのですが、実際にfprintfで出力しようとするとファイルポインタ ab_1 が定義されていません。みたいなエラーが出てしまいます。 sprintfで取った文字をファイルポインタにしようとしてるところがいけないんだとは思うのですが何かいい方法はないでしょうか? 環境はWindowsXP,VC++6です。

  • USWC fopenできません。

    USWCの勉強を始めて3日目の初心者です。 fopenの使い方がわからず困っています。  file = fopen("C:\test.txt",F_READ)  msgbox(file) 実行するとfileの戻り値は"1"なのにファイルが何も開きません。 何がおかしいのでしょうか? 初歩的な質問で申し訳ありませんがご教授ください。

  • windows環境でphpのfopenが使用できない

    rimyと申します。 windowsでapacheを使用していて、PHP5をインストールしています。 PHPは作動していて、スプリクトは実行できます。 しかしfopen関数を使ってファイルをロードしようとしたところ なぜかエラーが起きます。 fopen関数は fopen('ファイルパス','モード'); でやれるので やってみましたが、 Warning: fpassthru(): supplied argument is not a valid stream resource in C:\Apache\htdocs\test\reading.php on line 6 という表示が出ます。 ちなみにスプリクトは <html> <head><title>ファイルの読み出し</title></head> <body> <?php $text = fopen("test.txt","b""r"); fpassthru($text); ?> </body> </html> と書いてあります。 あるサイトで windows環境では モードにbを入れろ と書いてありましたがどういうことでしょうか。 まだ最近 勉強し初めでわかりませんのでよろしくお願いします。

    • ベストアンサー
    • PHP
  • fopenのモード文字列について

    fopenのモード文字列が w の時について何ですが、 #include <stdio.h> int main(void){ FILE *fp; fp=fopen("test.txt","w"); fclose(fp); return 0; } でファイルを作成した時 作成したファイルと同じディレクトリーに同じ名前のファイルが 存在するときは元のファイルに上書き(?)してファイルが作成されますよね? これは1度元のファイルを削除してから新たにファイルを作成しているのか、それとも元ファイルを空にしただけなのでしょうか?

  • 複数テキストファイルを読み込み、複数テキストファイルの出力

    質問は100個のテキストファイル(それぞれ10個のデータを含む)を読み込み、それぞれのテキストファイルから5個ずつデータを抽出し、200個のテキストファイルとして出力するというプログラムについての質問です。 以下が僕の作ったファイル出力部分のプログラムです。 /************/ void ecg_rr(fp,data_max) FILE *fp; { int b,i=0; int c=1; char fname[64]; data[0][i]=trend_data[0][i]; for(i=0;i<100;i++) sprintf(fname,"ss[%d].txt",1+i); fp = fopen(fname,"w"); fprintf(fp,"%4d\n",c); fprintf(fp,"%8.8f\n",data[0][0]); fprintf(fp,"%8.8f\n",data[0][2]); fprintf(fp,"%8.8f\n",data[0][4]); fprintf(fp,"%8.8f\n",data[0][6]); fclose(fp); sprintf(fname,"sk[%d].txt",1+i); fp = fopen(fname,"w"); fprintf(fp,"%4d\n",c); fprintf(fp,"%8.8f\n",data[0][1]); fprintf(fp,"%8.8f\n",data[0][3]); fprintf(fp,"%8.8f\n",data[0][5]); fprintf(fp,"%8.8f\n",data[0][9]); fclose(fp); } 複数ファイルの読み込み方がわからず、自分のプログラムだと1つのテキストファイルしか読み込めないので、16_4.batを作り、その中身を 16_4 読み込むテキストファイル名1.txt ss[1] 16_4 読み込むテキストファイル名1.txt sk[1] 16_4 読み込むテキストファイル名2.txt ss[2] 16_4 読み込むテキストファイル名2.txt sk[2] ・・・ とやったのですが、うまくいきませんでした。 どうすればよいのでしょうか。

  • fopen()関数

    こんにちは。 PHPで、fopen()関数を使用し、別ファイルにでーたを保存しているのですが、 fopen ("ファイル名", "a"); とやると、ファイルに追記されますよね。 この追記を、ファイルの一番最初に行いたいのです。 一番最初に書き込みをできるということで、 fopen ("ファイル名", "r+"); なども試してみたのですが、 その追記された文字数だけ最初側の文字が消えてしまい、追記は無理でした。 rewind()関数も使用したのですが、ダメでした。 何方か、ファイルの最初に、既に書き込まれている文字を消さずに追記する方法をご教授くだされば幸いです。

    • ベストアンサー
    • PHP