从文件中读取字节并覆盖相同的字节
Reading bytes from a file and overwriting the same bytes
我正在使用 fread
读取文件内容,我想覆盖刚刚读取的字节。那么让我们说:
fread(buffer, buffersize, 1, FilePointer);
我想覆盖我刚读过的完全相同的字节。缓冲区的大小各不相同,但我想覆盖与刚刚读取的完全相同的字节数。
我该怎么做?
这里是你可以做你想做的事的方法。我用ftell()
来记住起始位置,这样我就不用担心fread()
是成功还是失败了。
filePos = ftell(FilePointer);
fread(buffer, buffersize, 1, FilePointer);
fseek(FilePointer, filePos, SEEK_SET);
fwrite(buffer2, buffersize, 1, FilePointer);
请记住,如果您正在读取和写入同一个文件,则需要确保在从读取切换到写入时使用 fflush()
或 fseek()
,反之亦然。如果你不这样做,你会得到未定义的行为。 You can read more about that here.
顺便说一句,如果您正在寻找在文件中 reading/writing 字节的更快方法,您可能需要考虑使用 mmap()
将文件映射到内存。
我正在使用 fread
读取文件内容,我想覆盖刚刚读取的字节。那么让我们说:
fread(buffer, buffersize, 1, FilePointer);
我想覆盖我刚读过的完全相同的字节。缓冲区的大小各不相同,但我想覆盖与刚刚读取的完全相同的字节数。 我该怎么做?
这里是你可以做你想做的事的方法。我用ftell()
来记住起始位置,这样我就不用担心fread()
是成功还是失败了。
filePos = ftell(FilePointer);
fread(buffer, buffersize, 1, FilePointer);
fseek(FilePointer, filePos, SEEK_SET);
fwrite(buffer2, buffersize, 1, FilePointer);
请记住,如果您正在读取和写入同一个文件,则需要确保在从读取切换到写入时使用 fflush()
或 fseek()
,反之亦然。如果你不这样做,你会得到未定义的行为。 You can read more about that here.
顺便说一句,如果您正在寻找在文件中 reading/writing 字节的更快方法,您可能需要考虑使用 mmap()
将文件映射到内存。