質問 |
||
| 質問者:mofuko | ランダムアクセスができない | |
|---|---|---|
困り度:
|
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」 (※中身はバイナリ形式です) |
|
質問投稿日時:08/04/07 17:05 質問番号:3929914 |
||
回答良回答20pt |
|
| 回答者:asuncion | Write関数で、毎回新規書き込みモード("w")で ファイルをオープンしているのがまずいと思います。 それから、fwrite関数呼び出し時の第1引数は、&strでよいのでしょうか? |
|---|---|
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/04/07 17:17 回答番号:No.2 |
|
| この回答へのお礼 | 有難うございます。 書き込みは無事できましたが、 書き込む変数にも誤りがあったようですね。 無事できました。 |
回答良回答10pt |
|
| 回答者:koko_u_ | 単純にアペンドモードでファイルを開いていないから、 Write() を呼び出すたびにファイルがゼロバイトに切り詰められているのでは? |
|---|---|
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/04/07 17:14 回答番号:No.1 |
|
| この回答へのお礼 | 有難うございます。 ほんと単純なミスですね・・・ 無事できました。 |