dポイントプレゼントキャンペーン実施中!

時刻の値を直接バイナリファイルに読み書きする場合どのようなコードを書けばよろしいのでしょうか?
#include<stdio.h>
#include<time.h>

int main(void)
{
time_t current = time(NULL);
struct tm *timer = localtime(&current);
FILE *fp;

if((fp = fopen("wawawa.c", "wb")) == NULL){
printf("ファイルが開けませんでした。\n");
}
else{
fwrite(timer, sizeof(struct tm), 1, fp);
fclose(fp);
}

if((fp = fopen("wawawa.c", "rb")) == NULL){
printf("ファイルを開くことができませんでした。\n");
}
else{
fread(timer, sizeof(struct tm), 1, fp);
fclose(fp);

}
return 0;
}

これだと、struct tm構造体のメンバが参照されていないと思い、
int date[6];
date[0] = timer->tm_year+1900;
date[1] = timer->tm_mon+1;
date[2] = timer->tm_mday;
date[3] = timer->tm_hour;
date[4] = timer->tm_min;
date[5] = timer->tm_sec;
を付け加え、fwrite関数、fread関数もともに、(&date, sizeof(int), 6, fp)に修正したのですが、wawawa.cに表示されるのは「゚ #ク↑」のような単語の連なりです。

どのようにすれば、解消できるでしょうか?ご教示お願いします。

A 回答 (1件)

時刻の値をバイナリファイルに書いて、どのように使いたいの?


それをテキストファイルとして開いて読めるようにしたいなら、文字列に変換して書き込む必要がある。
それを別のプログラムでバイナリファイルとして読み込んで再生できるようにするなら、tm構造体は複雑になるだけなのでtime_tの方を64ビット整数として書き込んでおけば良い。その場合はファイルをテキストエディタで開いても当然に読めないけど。
# time_tの中身は通常は32ビットないし64ビットの整数なんで安全のため大きい方にしておく

互換性とか真面目に考えるならバイトオーダーの変換とか色々と考える必要も多いので、文字列に変換してテキストで保存の方が楽そうだけど。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!