ページ 11

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

Posted: 2015年10月03日(土) 17:41
by luc
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);

}

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

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

ところで、どうしてバイナリーモードなんでしょうか。

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

Posted: 2015年10月03日(土) 21:42
by amehirune
デバッグ…というか、「改行がされていない」確認は、
テキストエディタで該当ファイルを開いたものと仮定します。

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

ただし、読み込み(オープン)する際にもファイルをバイナリ指定すれば、
きちんと数値データを読み込むことができたはずです。

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

Posted: 2015年10月03日(土) 22:15
by luc
最初はテキストモードでしたが、改行できないのでバイナリモードにしてみました。
変わらなかったのですが、テキストモードに戻すのを忘れてました。
改行されてないのを知ったのは実際にテキストを開いて確認しました。

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

Posted: 2015年10月04日(日) 00:11
by box
luc さんが書きました:最初はテキストモードでしたが、改行できないのでバイナリモードにしてみました。
テキストモードで改行できなかったときのコードを貼ってみてください。

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

Posted: 2015年10月04日(日) 03:55
by luc

コード:

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: ファイル書き込みについて

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

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

Posted: 2015年10月04日(日) 09:38
by みけCAT
amehirune さんが書きました:私も一度やったことがあるのですが、先にboxさんが述べられています通り、
バイナリモードで書き込んでおられますので、
テキストエディタで開いてみると改行されていないように見えてしまいます。
これはおかしいです。
バイナリモードとテキストモードの差は改行コードを自動変換するかだけのはずで、ファイルの属性を変化させることは無いはずです。
実際、今回のプログラムの出力も、きちんと改行されていました。
1行しか書き出していないのでテキストエディタによっては最後の改行文字を表示せずに自動で付与するため、改行されていないように見えるかもしれませんが、
これはテキストモードでも同じはずです。

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

Posted: 2015年10月04日(日) 10:12
by luc
改行できてました・・・。追加書き込みと追加読み込みがあったのですね。勉強不足でした。
waにするとDebug assetion failed!とでて
画像
のようになってしまいます。

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

Posted: 2015年10月04日(日) 10:45
by 豆電球
すみません、"a"だけでいいです。
ごめんなさい。