bool CReadWrite::write(unsigned long long offset, void* pvsrc, unsigned long long nbytes)
{ int m_WriteResult;
pFile = fopen("E:\\myfile.bin","wb");
if (!pFile){
puts("Can't open file");
return false;
}
fseek(pFile,SIZE_OF_FILE-1,SEEK_SET);
fwrite(pvsrc,1,1,pFile);
fseek(pFile,offset,SEEK_SET);
printf("fseek(pFile,SIZE_OF_FILE-1,SEEK_SET); returned -- ", fseek(pFile,SIZE_OF_FILE-1,SEEK_SET));
printf( "fwrite(pvsrc,1,1,pFile); returned -- %d", fwrite(pvsrc,1,1,pFile));
printf("Current file pointer position is : %d\n",ftell(pFile));
m_WriteResult = fwrite (pvsrc, 1, nbytes, pFile);
if (m_WriteResult == nbytes){
puts("Wrote to file");
printf("The number of bytes written to the file is : %d\n\n",m_WriteResult);
fclose(pFile);
return true;
}
else{
puts("Unable to write to File.");
fclose(pFile);
return false;
}
}
main.cpp中:
char* pWriteBuffer;
char* pReadBuffer;
int nbytes = 85;
int nbytes2= 10;
pWriteBuffer = new char [nbytes];
pReadBuffer = new char [nbytes];
CReadWrite test;
for(Bufferndx = 0; Bufferndx<nbytes; Bufferndx++){
pWriteBuffer[Bufferndx] = Bufferndx;
}
test.write(20,pWriteBuffer,50);
for(Bufferndx = 10; Bufferndx;Bufferndx--){
pWriteBuffer[Bufferndx] = Bufferndx;
}
test.write(30,pWriteBuffer,nbytes2);
test.read(5,pReadBuffer,85);
delete[] pWriteBuffer;
delete[] pReadBuffer;
这是我写入给定缓冲区的程序的一部分。 write函数给出一个偏移量,一个源和要写入的字节数。
首先检查文件是否能够打开,fseek
s到我想要的文件大小-1,然后写一个字节。然后在文件中fseek
到给定的偏移量。如果它成功写入nbytes
,它会输出一些内容,然后关闭文件。否则它打印出它无法写入和关闭文件。
在我的主要内容中,我只是测试我的代码实际上写了我想要的内容,并且我有两个for循环,后面有两个写入。我之后也做test.read
,但我不确定为什么我无法看到正确的结果,我认为在编译时我应该进入调试模式。
仅供参考,read
类功能几乎与write
相同,但当然fread
。
我的问题是:当我逐步使用调试模式时为什么没有得到结果,为什么我无法正确填充缓冲区。它“差不多”就像我的write
s / read
并没有真正发生。
编辑:我正在“尝试做什么”填充一个85字节的缓冲区(我最大的缓冲区)。
test.write(20,pWriteBuffer,50)
将从偏移20开始并写入50个字节,也就是说。抵消20 -70。test.write(30,pWriteBuffer,nbytes2)
将从偏移量30开始,写入10个字节,也就是说。抵消20-30。或者那是计划,但我在调试时没有看到。此外,也许有人可以对此有所了解,但我正在审查它,它看起来像我...
fseek(pFile,SIZE_OF_FILE-1,SEEK_SET);
fwrite(pvsrc,1,1,pFile);
每次我写错了......我不应该在每次写作时都寻求更大的文件。唉
printf(“fwrite(pvsrc,1,1,pFile); return - %d”,fwrite(pvsrc,1,1,pFile)); //打印出1
printf(“fseek(pFile,SIZE_OF_FILE-1,SEEK_SET);返回 - ”,fseek(pFile,SIZE_OF_FILE-1,SEEK_SET)); //打印出0
答案 0 :(得分:1)
以下是我看到的问题:
建议:永远不要忘记检查您正在呼叫的所有功能的返回代码。打印出来。就像你在这里所做的那样:if (!pFile){ /*...*/}
E.g。
fseek(pFile,SIZE_OF_FILE-1,SEEK_SET);
fwrite(pvsrc,1,1,pFile);
fseek(pFile,offset,SEEK_SET);
// should be
std::cout << "fseek(pFile,SIZE_OF_FILE-1,SEEK_SET); returned -- " << fseek(pFile,SIZE_OF_FILE-1,SEEK_SET) << std::endl;
printf( "fwrite(pvsrc,1,1,pFile); returned -- %d", fwrite(pvsrc,1,1,pFile));
int retCode;
if((retCode = fseek(pFile,offset,SEEK_SET)) != 0)
std::cout << "fseek(pFile,offset,SEEK_SET) returned non-zero code -- " << retCode << std::endl;
不要感到困惑,我刚刚展示了3种不同的方式来打印3个不同的调用的调试信息。你可以选择任何一种方式(最好是第三种方式)并随处使用。