2011-10-14 115 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