【发布时间】:2013-08-17 22:20:50
【问题描述】:
我创建了一个包含 4000 个块的文件,块大小为 4096 字节。我写了这个文件中的一些特定块,现在我想读取这些块并将结果写入一个新的输出文件。
因此我打开我在“rb”模式下创建的文件(storeFile)和在“wb”模式下的输出文件(outputFile)如下:
FILE * outputFile=fopen(outputFilename,"wb");
FILE * storeFile=fopen(storeFilename, "rb");
现在我正在尝试寻找正确的位置并将所有块读取到新文件(输出文件):
for(i=0; i<BlocksUsed; i++)
{
fseek(storeFile,blocksToRead[i]*4096,SEEK_SET);
fread(ptr, 4096,1,storeFile);
fwrite(ptr,4096,1outputFile);
...
rewind(storeFile)
}
不幸的是,这段代码导致的文件不是我写入 storeFile 的文件。 文件大小为 BlockUsed*4096Bytes。
我做错了什么?
提前感谢您!
【问题讨论】:
-
什么是 blocksToRead 数组,里面有什么?
-
有我之前写的块数。
-
1) 我看不到您在哪里检查“文件打开”或“文件读取”错误,2) 您可能不需要“fseek()”或“rewind() " inside 你的循环
-
如果您使用带有 fseek() 的直接访问文件,则没有理由使用 rewind(),这实际上是用于顺序文件。您实际上想用这段代码做什么?如果输出文件为空并且您正在读取 BlocksUsed 的 4096 块数,那么为什么输出文件不会以相同数量的块结束?
-
文件打开没有问题。我检查了这个,但没有发布这个。嗯,我怎么不需要 fseek?那我怎么来我的位置呢?例如,如果我需要阅读 BLock 2 5 和 10?