【问题标题】:CFile writing questionCFile编写问题
【发布时间】:2011-09-14 04:53:09
【问题描述】:

在我的 MFC 应用程序中,我使用 CFile 类将数据写入文件。我使用 Write() 方法为每个数据成员按顺序存储 CParagraph 类的对象序列。然后我使用 Read() 方法从文件读入内存。 CParagraph 的成员之一曾经是 int 类型,但现在我必须将其更改为 size_t,因为 int 无法容纳足够大的数据。如果我的应用程序读取在此更改之前创建的文件,然后将 CParagraph 对象保存回文件中,则 size_t 的大小将传递给 Write 方法,而不是 int 的大小,因此文件将增长。我的问题是:对象被修改保存后写入的数据是否会因为对象变大而被覆盖从而损坏?

谢谢。

【问题讨论】:

    标签: c++ mfc


    【解决方案1】:

    是的。如果文件中的任何内容发生大小变化,则必须重新保存之后的所有内容。

    通常将“版本”字符保存为文件的第一部分。然后,当您需要调整变量大小(或更改大量内容)时,您可以在保存时更改版本。然后,在加载时,您可以检查版本,并使用相应的代码来加载它。然后您仍然可以打开旧版本的文件。请注意,此版本应仅在文件格式更改时更改,而不是在您重新构建/发布时更改。

    【讨论】:

    • 我讨厌我的回答如此简短,但老实说,我想不出还有什么要说的。 :( 我可以输入代码,但没有任何帮助。
    • 您可能想要解决文件版本兼容性问题。新的 MFC 应用程序还能读取旧文件吗?在实践中,这对于广泛使用的程序来说是一个真正的问题。如果他们所有的旧文件突然无法使用,人们不喜欢它。哎呀,即使人们从 WordPerfect 迁移到 MS Word,他们仍然希望使用他们的旧文件。
    • 是的,我添加了文件版本检查,所以如果是旧文件,我传递 sizeof(int),否则传递 sizeof(myVariable)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多