同一文件上的seekp()、seekg()、read()和write()存在问题 我处理的是C++中的文件问题,我无法解决。我正在用寄存器管理一个文件,我正在尝试“排序插入”,西班牙语是“Insercción ordenada”,但我不知道翻译成英语。我试图做的是在文件末尾打开文件,并将寄存器与我要插入文件的寄存器进行比较。每个大于新寄存器的寄存器都会移动一个寄存器的位置到文件末尾。当比较返回新寄存器小于当前选定值时,我将新寄存器写入其正确位置

同一文件上的seekp()、seekg()、read()和write()存在问题 我处理的是C++中的文件问题,我无法解决。我正在用寄存器管理一个文件,我正在尝试“排序插入”,西班牙语是“Insercción ordenada”,但我不知道翻译成英语。我试图做的是在文件末尾打开文件,并将寄存器与我要插入文件的寄存器进行比较。每个大于新寄存器的寄存器都会移动一个寄存器的位置到文件末尾。当比较返回新寄存器小于当前选定值时,我将新寄存器写入其正确位置,c++,file,insert,sorted,C++,File,Insert,Sorted,我的具体问题是文件中的最后一个寄存器被读取了2次,因此,寄存器被写入了2次 我想复制我写的代码,但名称是西班牙语的,代码中包含大量的片段,用于管理错误和char*s与structs之间的转换。。。这是一片混乱,只会让我们感到困惑 我想有人也会遇到同样的情况,我会感谢网络上的例子或者一些关于如何在同一个文件上使用seekp和seekg的文章 非常感谢 或多或少地,代码: int readPosition, writePosition; readPosition = // Byte where t

我的具体问题是文件中的最后一个寄存器被读取了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);
int readPosition,writePosition;
readPosition=//文件中最后一个寄存器开始的字节。
writePosition=readPosition+registerSize;
f->seekg(读取位置,ios::beg);
oldReg=新字符[registerSize];
f->read(oldReg,registerSize);
f->seekp(writePosition,ios::beg);
while(){//if cadena<新寄存器
//对于写入,我需要在写入指针之后移动读取指针
f->seekg(readPosition+2*寄存器化,ios::beg);
f->write(oldReg,registerSize);
readPosition-=寄存器化;
writePosition-=寄存器化;
f->seekg(读取位置,ios::beg);
f->seekp(writePosition,ios::beg);
删除oldReg;
oldReg=新字符[registerSize];
f->read(oldReg,registerSize);
}
删除oldReg;
f->seekp(writePosition,ios::beg);
f->seekg(writePosition+registerSize,ios::beg);
f->write(newRegister,registerSize);
这不是真正的代码,而是我的方法所做的。我希望你们注意我是如何使用seekp()和seekg()的,因为我不确定我使用它们的方式。seekp和seekg有几个问题,我注意到这两个指针非常匹配。

这不起作用

f->seekg(readPosition,ios::beg);
f->seekp(writePosition,ios::beg);
一个文件只有一个位置。当你需要的时候,当你从阅读变为写作或者从写作变为阅读时,你必须去寻找它们。

这行不通

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

一个文件只有一个位置。当您需要查找时,当从读更改为写或从读更改为写时,您必须进行查找。

如何循环查找文件?可能您第一次到达了文件的末尾,但不是在它之后,因此尚未遇到EOF。这可能会有所帮助。正确的翻译是“插入排序”()如何循环遍历文件?可能您第一次到达文件的末尾,但不是在它之后,因此尚未遇到EOF。这可能会有所帮助。似乎正确的翻译是“插入排序”()谢谢,我在阅读时不理解,但我意识到我必须在每次操作之前移动任何指针谢谢,当我读到它的时候我不明白,但是我意识到我必须在每次操作之前移动任何一个指针