2011-10-14 64 views
0
bool CReadWrite::write(unsigned long long offset, void* pvsrc, unsigned long long nbytes) 
{ int WriteResult; 

    pFile = fopen("D:\\myfile.bin","wb"); 

    if (!pFile){ 
     puts("Can't open file"); 
     return false; 
    } 

    //offset = fseek(pFile,offset, 

    WriteResult = fwrite (pvsrc, 1, nbytes, pFile); 

    if (WriteResult == nbytes){ 
     puts("Wrote to file"); 
     fclose(pFile); 
     return true; 
    } 
    else{ 
     puts("Unable to write to File."); 
     fclose(pFile); 
     return false; 
    } 
} 

这是我的课程功能到目前为止。我基本上打开一个文件,检查它是否确实打开,如果不出去。写入文件,检查文件是否看到文件是否确实写入以返回true。否则返回false。你可以通过我的参数来判断,我正在创建一个偏移量,我可以给出一个特定的偏移量,即10,然后从10开始,然后从那里写入。我知道我需要使用fseek,但我不能认为我处于文件的开头或文件中的任何位置。林肯定我需要使用SEEK_SET,但我可能是错的。任何关于实现上述愿望的想法?谢谢。读写偏移

+0

如果是C++代码,为什么不使用'fstream's? – littleadv

回答

2

如果您使用的是没有附加设置的fopen(因为您是“wb”创建一个空文件),您可以假定您在开始。

无论如何,SEEK_SET将位置设置为从开始的给定偏移量。

如果文件没有你想寻找的偏移量(就像你的情况那样),那么问题是你需要做什么?如果只是填充 - 然后编写填充字节offset,然后写入内容,否则可能要使用“a”而不是“w”。 “w”截断文件的现有内容,而“a”打开以附加并将位置设置到现有内容的末尾。

更多详细信息here

+0

我想选择说如果我已经在文件中有10个字节,去偏移量7,并从那里写。或者从任何偏移开始,我都可以从那里开始写入nbytes。 – Questioneer

+0

此外,我想我也需要使用ftell,因为我有兴趣可能写入文件中的某个位置来计算文件本身中的字节数量 – Questioneer

+0

@Questioneer如果您已经有文件中的数据 - 不要打开它用“w”代替,但用“a”代替,然后用'fseek'。获取有关文件大小的信息可以用'fstat'完成。你在问一堆相互无关的问题,为什么不直接阅读'stdio'参考? – littleadv