c++ - fopen 并与磁盘同步

标签 c++ struct io fopen fwrite

我写了一个程序,它必须将结构写入二进制文件并从中读取。 我使用 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/

相关文章:

c++ - Windows 服务上基于 SSL 的 LDAP

c++ - 怎么了? undefined reference ?

c++ - 在 C++ 类中实现 TPCircularBuffer

c - 解析一个结构体以从结构体数组中运行

go - 像使用io/ioutil的“cat” linux命令一样

c++ - CGAL:多边形重叠测试

go - 使用自己的结构(解码的 JSON)初始化外部 lib 结构会产生类型错误

struct - 为什么 rust 中的 "tuple struct"称为 "named tuple"

java - 程序从文件读取字节并转换为十六进制

java - 如何使用 Java 进行面向 block 的磁盘 I/O?或类似的 B+ 树