我正在處理C++中的文件問題,我無法解決這個問題。我正在管理一個帶有寄存器的文件,我試圖做「排序插入」,西班牙文是「Insercciónordenada」,但我不知道翻譯成英文。我試圖做的是在文件末尾打開文件,並將寄存器與我想要插入文件的寄存器進行比較。每個大於新的寄存器都將一個寄存器的位置移動到文件末尾。當比較結果返回新值小於當前選擇的值時,我將新寄存器寫入正確的位置。seekp(),seekg(),read()和write()在同一個文件上的問題
我的具體問題是文件中的最後一個寄存器被讀取2次,因爲它,寄存器被寫入2次。
我想複製我編寫的代碼,但名稱是用西班牙語,代碼中包含很多代碼段來管理char * s和結構體之間的錯誤和轉換......這是一團糟,它只是混淆我們。
我想有人會遇到同樣的情況,我會感謝網絡上的例子或一些關於如何在同一個文件上使用seekp和seekg的文章。
非常感謝!
更多或更少的代碼:
int readPosition, writePosition;
readPosition = // Byte where the last register starts in the file.
writePosition = readPosition + registerSize;
f->seekg(readPosition,ios::beg);
oldReg = new char[registerSize];
f->read(oldReg,registerSize);
f->seekp(writePosition,ios::beg);
while() { // if cadena < new register
// For writing, I need to move the reading pointer after the writing pointer
f->seekg(readPosition + 2*registerSize,ios::beg);
f->write(oldReg,registerSize);
readPosition -= registerSize;
writePosition -= registerSize;
f->seekg(readPosition,ios::beg);
f->seekp(writePosition,ios::beg);
delete oldReg;
oldReg = new char[registerSize];
f->read(oldReg,registerSize);
}
delete oldReg;
f->seekp(writePosition,ios::beg);
f->seekg(writePosition + registerSize,ios::beg);
f->write(newRegister,registerSize);
這不是真正的代碼,但我什麼方法做。我希望你注意到我如何使用seekp()和seekg(),因爲我不確定我使用它們的方式。我在seekp和seekg上遇到了幾個問題,我注意到這兩個指針非常匹配。
你如何循環瀏覽文件?可能你到達文件的末尾,但不是在它之後,第一次,所以EOF還沒有遇到。 – 2011-05-21 16:07:14
這可能是幫助http://stackoverflow.com/questions/6029875/problem-with-eof-when-determine-stream-end – 2011-05-21 16:09:13
似乎正確的翻譯是「插入排序」(http://en.wikipedia。 org/wiki/Insertion_sort) – 2011-05-21 16:40:25