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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
luc
記事: 32
登録日時: 10年前

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

#1

投稿記事 by luc » 9年前

win32API,C++を使用しています
現在タイムランキングを作ってるのですが、タイムをテキストに書き込みする時にうまく改行されません。
どうしてでしょう。

コード:

void Ranking_save(int rankTime)
{
	FILE *fp;
	TCHAR mes[80];

	if ((fp = fopen(FileName, "wb")) == NULL)
	{
		wsprintf(mes, TEXT("データファイルのオープンに失敗しました。保存を中止しました。\n"));
		OutputDebugString(mes);
		return;
	}
		fprintf(fp, "%d\r\n", rankTime);  //ファイルに書き込み
	fclose(fp);

}

box
記事: 2002
登録日時: 14年前

Re: ファイル書き込みについて

#2

投稿記事 by box » 9年前

luc さんが書きました: 現在タイムランキングを作ってるのですが、タイムをテキストに書き込みする時にうまく改行されません。
うまく改行しないことをどうやって検知しましたか?
複数のタイムを書き込んだ後、それをエディターか何かで開いたときに
検知したのですか?

ところで、どうしてバイナリーモードなんでしょうか。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
amehirune
記事: 181
登録日時: 11年前
住所: どっか
連絡を取る:

Re: ファイル書き込みについて

#3

投稿記事 by amehirune » 9年前

デバッグ…というか、「改行がされていない」確認は、
テキストエディタで該当ファイルを開いたものと仮定します。

私も一度やったことがあるのですが、先にboxさんが述べられています通り、
バイナリモードで書き込んでおられますので、
テキストエディタで開いてみると改行されていないように見えてしまいます。
(調べたことがないのでわかりませんが、改行の文字コード自体は保存されている…?)

ただし、読み込み(オープン)する際にもファイルをバイナリ指定すれば、
きちんと数値データを読み込むことができたはずです。
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※

luc
記事: 32
登録日時: 10年前

Re: ファイル書き込みについて

#4

投稿記事 by luc » 9年前

最初はテキストモードでしたが、改行できないのでバイナリモードにしてみました。
変わらなかったのですが、テキストモードに戻すのを忘れてました。
改行されてないのを知ったのは実際にテキストを開いて確認しました。

box
記事: 2002
登録日時: 14年前

Re: ファイル書き込みについて

#5

投稿記事 by box » 9年前

luc さんが書きました:最初はテキストモードでしたが、改行できないのでバイナリモードにしてみました。
テキストモードで改行できなかったときのコードを貼ってみてください。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

luc
記事: 32
登録日時: 10年前

Re: ファイル書き込みについて

#6

投稿記事 by luc » 9年前

コード:

void Ranking_save(int rankTime)
{
	FILE *fp;
	TCHAR mes[80];
	int i;

	if ((fp = fopen(FileName, "w")) == NULL)
	{
		wsprintf(mes, TEXT("データファイルのオープンに失敗しました。保存を中止しました。\n"));
		OutputDebugString(mes);
		return;
	}
		fprintf(fp, "%d\n", rankTime);
	fclose(fp);

}

豆電球

Re: ファイル書き込みについて

#7

投稿記事 by 豆電球 » 9年前

"w"や"wb"を"wa"にすればいいだけのように見えるのですが。。。
int型の引数を1つ受け取ってそれをファイルに書き込んでいますが
前のデータを破棄していますから、最後に関数を呼んだ時のデータしか残りません。
初心者なので全然レベルの違う話をしているのであれば、すみません。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: ファイル書き込みについて

#8

投稿記事 by みけCAT » 9年前

amehirune さんが書きました:私も一度やったことがあるのですが、先にboxさんが述べられています通り、
バイナリモードで書き込んでおられますので、
テキストエディタで開いてみると改行されていないように見えてしまいます。
これはおかしいです。
バイナリモードとテキストモードの差は改行コードを自動変換するかだけのはずで、ファイルの属性を変化させることは無いはずです。
実際、今回のプログラムの出力も、きちんと改行されていました。
1行しか書き出していないのでテキストエディタによっては最後の改行文字を表示せずに自動で付与するため、改行されていないように見えるかもしれませんが、
これはテキストモードでも同じはずです。
添付ファイル
fairukakikominitiute.zip
テストデータ
(21.79 KiB) ダウンロード数: 134 回
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

luc
記事: 32
登録日時: 10年前

Re: ファイル書き込みについて

#9

投稿記事 by luc » 9年前

改行できてました・・・。追加書き込みと追加読み込みがあったのですね。勉強不足でした。
waにするとDebug assetion failed!とでて
画像
のようになってしまいます。
最後に編集したユーザー luc on 2015年10月04日(日) 11:32 [ 編集 1 回目 ]

豆電球

Re: ファイル書き込みについて

#10

投稿記事 by 豆電球 » 9年前

すみません、"a"だけでいいです。
ごめんなさい。

閉鎖

“C言語何でも質問掲示板” へ戻る