Visual studio 2010 在向文件追加数据时,什么会导致失败?

Visual studio 2010 在向文件追加数据时,什么会导致失败?,visual-studio-2010,windows-7,file-io,Visual Studio 2010,Windows 7,File Io,我维护一个程序,负责从数据采集系统收集数据,并将数据附加到一个非常大(大小>4GB)的二进制文件中。在附加数据之前,程序必须验证此文件的头,以确保文件中的元数据与已收集的元数据匹配。为此,我按如下方式打开该文件: 数据文件=fopen(文件名为“rb+”) 然后我查找文件的开头,以验证头。完成此操作后,我将按如下方式查找文件末尾: _fseeki64(数据文件)、文件长度64(数据文件)、搜索集 此时,我编写了使用fwrite()收集的数据。我会仔细检查所有I/O函数的返回值 我们在其中一台计算

我维护一个程序,负责从数据采集系统收集数据,并将数据附加到一个非常大(大小>4GB)的二进制文件中。在附加数据之前,程序必须验证此文件的头,以确保文件中的元数据与已收集的元数据匹配。为此,我按如下方式打开该文件:

数据文件=fopen(文件名为“rb+”)

然后我查找文件的开头,以验证头。完成此操作后,我将按如下方式查找文件末尾:

_fseeki64(数据文件)、文件长度64(数据文件)、搜索集

此时,我编写了使用fwrite()收集的数据。我会仔细检查所有I/O函数的返回值

我们在其中一台计算机(64位windows 7)上测试该程序时,会间歇性地显示一种情况,即数据似乎已写入文件,但文件的上次更改时间和大小均未更改。如果对fopen()、fseek()或fwrite()的任何调用失败,我的程序将抛出异常,这将导致中止数据收集过程并记录错误。在这台机器上,这些故障似乎都没有发生。让事情变得更加神秘的是,如果在主机文件系统上设置了还原点,问题只会在将来某个时间间歇性地重新出现

我们曾试图在其他机器(vista 32位操作系统)上重现此问题,但未能成功重现此问题(这不一定意味着什么,因为问题一开始是间歇性的)

还有其他人遇到过类似的情况吗?有可能的补救方法吗

进一步信息


现在,我发现在对文件调用fflush()时会发生故障,GetLastError()返回的win32错误是665(错误\文件\系统\限制)。在google中搜索此错误会导致一系列与“扩展数据块”相关的报告对于SQL server文件。我怀疑文件系统正在报告某种日志资源,这是因为我们正在通过打开、添加一块数据并关闭一个大文件来扩展它。我现在希望了解有关此特定错误的信息,并希望找到有效的补救方法。

append由于文件系统碎片限制而失败。您在

中回答了这个问题,您说“数据似乎已写入文件”。文件是否按预期进行了修改?尽管大小/修改日期没有反映这一点?不,我的意思只是来自fwrite()的返回值指示数据已成功写入。