2009-05-10 2 views
6

私はファイルストリームを開いて準備ができています。Cのファイルの1バイトを変更する

変更がファイルに反映されるようにストリーム内の1つのバイトにアクセスして変更するにはどうすればよいですか?

提案がありますか?

+0

テキストまたはバイナリ? – dirkgently

答えて

8
#include "stdio.h" 

int main(void) 
{ 
    FILE* f = fopen("so-data.dat", "r+b"); // Error checking omitted 
    fseek(f, 5, SEEK_SET); 
    fwrite("x", 1, 1, f); 
    fclose(f); 
} 
+0

A(f!= NULL)が必要です。 fclose(NULL)はUBを呼び出します。 – dirkgently

+0

fwrite( "x"、1、1、f); 文字列 "x"のアドレスの最初のバイトを書き込みませんか? –

+0

いいえ、それは私を無視しません:-) –

5
FILE* fileHandle = fopen("filename", "r+b"); // r+ if you need char mode 
fseek(fileHandle, position_of_byte, SEEK_SET); 
fwrite("R" /* the value to replace with */, 1, 1, fileHandle); 
+1

"rw"はファイルを切り捨てます。あなたは "rb"が必要です。 –

+0

sizeof(char)== 1、定義による。 – dirkgently

+1

誰もが正しいです:)長い時間no C. –

3
#include <stdio.h> /* standard header, use the angle brackets */ 

int main(void) 
{ 
    char somechar = 'x'; /* one-byte data */ 
    FILE* fp = fopen("so-data.txt", "r+"); 
    if (fp) { 
     fseek(fp, 5, SEEK_SET); 
     fwrite(&somechar, 1, 1, fp); 
     fclose(fp); 
    } 
    return 0; /* if you are on non-C99 systems */ 
} 
関連する問題