将文件读入结构

时间:2014-02-24 22:48:31

标签: c

我正在以艰难的方式完成学习book并在练习17中遇到了一些问题。在示例代码中,我们创建了一个自定义数据库并将其写入文件。然后我们再次阅读它以进行编辑。

struct Connection *Database_open(const char *filename, char mode)
{
    struct Connection *conn = malloc(sizeof(struct Connection));
    if (!conn) die("Memory error");

    conn->db = malloc(sizeof(struct Database));
    if (!conn->db) die("Memory error");

    if (mode == 'c') {
        conn->file = fopen(filename, "w");
    }
    else {
        conn->file = fopen(filename, "r+");
        if (conn->file) {
            Database_load(conn);
        }
    }

    if (!conn->file) die("Failed to open the file");

    return conn;
}

看来我可以创建数据库ok(在'c'模式下)但是当我回去尝试阅读时

void Database_load(struct Connection *conn)
{
    int rc = fread(conn->db, sizeof(struct Database), 1, conn->file);
    if(rc != 1) die("Failed to load database.");
}

rc始终为0.

我已经尝试了大量的实验来阅读写作文件,而我最接近它的工作就是将文件读成二进制文件,即

    else {
        conn->file = fopen(filename, "rb+");

这导致rc不为0但是它似乎破坏了程序的其他部分。

有没有其他人可以尝试其他任何东西?我需要提到的唯一另一件事是我在Visual Studio 2013上构建并且示例代码是用于gcc的,这是否会产生影响?

我只包含我认为相关的来源,但full code is here如果它有助于回答。

谢谢!

1 个答案:

答案 0 :(得分:1)

我发布的代码中没有任何错误,您的代码用于gcc的事实并不重要。 它可能是您文件中的错误,是文本文件还是二进制文件?在最后一种情况下,您可以使用实用程序作为HxD进行探索。

祝你好运