在同一文件上有seekp(),seekg(),read()和write()的问题

时间:2011-05-21 16:01:55

标签: c++ file insert sorted

我正在处理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上遇到了一些问题,我注意到这两个指针非常匹配。

1 个答案:

答案 0 :(得分:3)

这不起作用

f->seekg(readPosition,ios::beg);
f->seekp(writePosition,ios::beg);

文件只有一个位置。当你需要它们时,你必须在从阅读到写作的过程中进行搜索,反之亦然。