• ベストアンサー

ランダムアクセスができない

C言語のランダムアクセス(fseek)で、 アクセス位置を「ファイル末尾」に設定したいのですが どうも自分で作成したソースは正常に動いてくれません。 (常にアクセス位置が先頭になってしまいます) 何かが間違ってるのは確かなのですが、 もし原因がお判りの方がいらっしゃいましたら アドバイスをお願いします。 動作としては、追記書き込みみたいな感じで どんどん同一ファイルに書きこんで行く感じです ―――――――――――――――――――――――――― #include <stdio.h> #include <string.h> // 書き込み関数 bool Write( char *fname, char *str ){ FILE *fp = NULL; int len = (int)strlen(str); fp = fopen( fname, "wb" ); if( !fp ) return false; fseek( fp, 0L, SEEK_END ); printf( "位置:%d\n", ftell(fp) ); fwrite( &str, len, 1, fp ); fclose( fp ); return true; } // メイン関数 int main(){ char *fname = "Test.txt"; Write( fname, "テスト" ); Write( fname, "教えて" ); Write( fname, "goo" ); return 0; } ―――――――――――――――――――――――――― 動作結果:   Test.txtの中身「goo」 動作してほしい結果:   Test.txtの中身「テスト教えてgoo」 (※中身はバイナリ形式です)

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

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.2

Write関数で、毎回新規書き込みモード("w")で ファイルをオープンしているのがまずいと思います。 それから、fwrite関数呼び出し時の第1引数は、&strでよいのでしょうか?

mofuko
質問者

お礼

有難うございます。 書き込みは無事できましたが、 書き込む変数にも誤りがあったようですね。 無事できました。

その他の回答 (1)

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

単純にアペンドモードでファイルを開いていないから、 Write() を呼び出すたびにファイルがゼロバイトに切り詰められているのでは?

mofuko
質問者

お礼

有難うございます。 ほんと単純なミスですね・・・ 無事できました。

関連するQ&A