打开并与磁盘同步

打开并与磁盘同步

我编写了一个程序,该程序必须将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/

10-09 13:34