我创建了一个包含 4000 个块的文件,块大小为 4096 字节。
现在我想操作单个块并再次读取它们而不更改文件的大小。
实际上我想将另一个文件中的块写入我创建的文件中的特定块。
因此,我以二进制模式打开文件,如下所示:
FILE * storeFile=fopen(targetFile, "wb"); // this one I created before
FILE * sourceFILE=fopen(sourceFile,"rb");
现在我正在尝试将内容读取到指针
char * ptr=malloc(4096);
...
for(i=0; i<blocks_needed; i++)
{
fread(ptr,4096,1,sourceFile);
// now I am going to the position of the blocks I want to write to
fseek(storeFile,freeBlocks[i]*4096,SEEK_SET);
// and now I am writing it to the File I created before
fwrite(ptr,4096,1,storeFile);
...
}
由于某种原因,我之前创建的文件改变了它的大小,并成为我想要写入其中的文件的副本。
我究竟做错了什么?
先感谢您!
来自fopen
手册页:
``w'' 截断为零长度或创建用于写入的文本文件。该流位于文件的开头。
每次打开目标文件时都会删除它。您可能感兴趣a
or a+
:
``a'' 打开以供写入。如果文件不存在,则创建该文件。该流位于文件末尾。对文件的后续写入将始终在文件的当前末尾结束,而不管任何中间的 fseek(3) 或类似内容。
``a+'' 打开以供读取和写入。如果文件不存在,则创建该文件。该流位于文件末尾。对文件的后续写入将始终在文件的当前末尾结束,而不管任何中间的 fseek(3) 或类似内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)