我编写了一个程序,该程序必须将struct写入二进制文件并从中读取。
我使用fread,fwrite,fopen,fseek和fclose。
我编写了以下函数,可打印文件中的所有记录。
void ReadFile::printList(){
// clearerr(bookFilePtr);
fseek(bookFilePtr,0L,SEEK_SET); // set to begin of file
int counter = 1;
long int line = 1;
int pageCounter = 1;
while (this->readFromFile() == 1){
string output;
mvprintw(++line, 27,"***Title*****************Value*********" );
output = "Name: " + bookPtrObj->name;
mvprintw(++line, 27, output.data());
output = "Publisher: " + bookPtrObj->publisher;
mvprintw(++line, 27,output.data());
output = "Author: " + bookPtrObj->author;
mvprintw(++line, 27,output.data());
output = "Translator: " + bookPtrObj->translator;
if (bookPtrObj->translation == true )
mvprintw(++line, 27,output.data());
if (bookPtrObj->stock != true )
mvprintw(++line, 27,"Stock: The given book doesn't exist.");
else
mvprintw(++line, 27,"Stock: The given book exist.");
if ( pageCounter % 3 == 0){
mvprintw(++line, 27,"Press any key to see next page...");
getch();
clear();
line = 1;
}
pageCounter++;
refresh();
fseek(bookFilePtr, counter * sizeof(struct book) ,SEEK_SET); // seek to next data
counter ++;
}
// fflush(bookFilePtr);
menu();
}
注意:我第一次运行并输入数据,我可以很好地从页面上看到我的数据并且可以逐页查看。但是当我退出程序时,一切都坏了。当我第二次运行并在函数上方运行时,我得到了细分错误,我跟踪它,它是我的结构的指针bookPtrObj无法读取我的文件。我尝试使用fopen类型[rb。 wb,ab +,rb +,a +,w +,aw +]等。但我没有得到结果。
我用以下几行写入文件,当然,我填充struct的元素,然后运行以下2行:
fseek(bookFilePtr,0L,SEEK_END);
fwrite(ptr,sizeof(struct book),1,bookFilePtr);
我如何将数据保留在文件中?
最佳答案
您没有提供很多代码,但是我的猜测是您保存了指向字符串的指针,而不是字符串本身,甚至更糟(或者更糟?)-std::string
对象内容。您需要正确地序列化它们。
关于c++ - 打开并与磁盘同步,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8626971/