我正在处理C ++中的文件问题我无法解决问题。我正在管理一个带寄存器的文件,我正在尝试“Sorted Insert”,西班牙语是“Insercciónordenada”,但我不知道翻译成英文。我尝试做的是打开文件末尾的文件,并将寄存器与我想在文件中插入的寄存器进行比较。每个寄存器大于新寄存器将一个寄存器的位置移动到文件末尾。当比较返回new小于当前选择的值时,我将新寄存器写入正确的位置。
我的具体问题是文件中的最后一个寄存器被读取了2次,因此,寄存器写入了2次。
我想复制我编写的代码,但名称是西班牙文,代码中包含很多片段来管理char * s和structs之间的错误和转换......这是一团糟,只会让我们感到困惑
我认为有人会遇到同样的情况,我会感谢网上的例子或一些关于如何在同一档案中使用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上遇到了一些问题,我注意到这两个指针非常匹配。
答案 0 :(得分:3)
这不起作用
f->seekg(readPosition,ios::beg);
f->seekp(writePosition,ios::beg);
文件只有一个位置。当你需要它们时,你必须在从阅读到写作的过程中进行搜索,反之亦然。