2010-02-26 111 views
2

我目前正在用C++写一个插件。对于我的功能,我要求API保存一个文件。当文件被写入时,API给了我一个返回值......或者看起来似乎。问题是,这个返回值返回的太早,以至于我无法确定该文件是否完全写入。检查写入文件是否完成

是否有可能独立于api检查文件的写入完整性?

+1

哪个API? OS API?输入输出流? C风格的文件操作? – 2010-02-26 11:32:40

回答

4

这是因为系统在请求时不会将数据写入磁盘,但仍会返回。在C中,你可以使用int fflush (FILE *stream),但我不知道你会如何在C++中做到这一点。

+1

当然+1 - 这是答案。删除了我的垃圾。看到这个页面的C + + i/o http://www.cs.hmc.edu/~geoff/classes/hmc.cs070.200109/notes/io.html – ChrisF 2010-02-26 11:37:14

+0

嗯,我想我不够清楚。我有一个应用程序为我提供了(通过插件API)告诉应用程序它应该保存当前文档的能力。只要我这样做,我会得到返回值,虽然它还没有完成写入文件。这意味着保存文件的行为由应用程序完成。在我看来,这是应用程序中的错误或误解。但我必须为此编写代码。我正在考虑检查文件大小,看它是否停止增长或类似的东西(尽管这很可怕)。我想你可能会有更好的办法。 – draetsch 2010-02-26 13:35:21

1

即使我们重新读取文件,'验证'写入是否发生,也不是真的,您仍然可以查看内核缓冲区。

0

您可以将原始缓冲区和您写入的文件比较为字节,但我认为最好使用相应的操作系统fflushfclose来操作系统。

0

如上所述,您可以使用fflush()。您可以根据您是使用流类还是描述符来调用sync()/ fsync()。