我写了一个程序,它必须将结构写入二进制文件并从中读取。 我使用 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+] 等等。但我没有得到结果。 我用以下几行写入文件,当然我填充了结构的元素,然后运行以下两行:
fseek(bookFilePtr,0L,SEEK_END);
fwrite(ptr,sizeof(struct book),1,bookFilePtr);
我如何将我的数据保存在文件中?
最佳答案
您没有提供大量代码,但我猜您保存的是指向字符串的指针,而不是字符串本身,或者更糟(或者更糟?)— std::string
对象内容。您需要正确地序列化它们。
关于c++ - fopen 并与磁盘同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8626971/