ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者: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
この回答へのお礼有難うございます。
ほんと単純なミスですね・・・
無事できました。
 
最新から表示回答順に表示良回答のみ表示