如何在win32上刷新stdlib输出文件?

我有一个C ++程序写入Windows 7上的文件。当我调用f.flush() NTFS文件不会变大。 有什么办法强制文件被刷新

Solutions Collecting From Web of "如何在win32上刷新stdlib输出文件?"

你可以看看这里:
如何从fopen FILE结构中获取文件HANDLE?
代码如下所示:

  FlushFileBuffers((HANDLE) _fileno(_file)); 

在调用FlusFileBuffers之前,不要忘记调用fflush(file)。

对于std :: fstream和gnu stl,我在我的linux上检查过它,在家里没有窗口,但是应该和mingw一起工作,可能需要一些修改:

 #include <cstdio> #include <cstdlib> #include <cassert> #include <fstream> #include <ext/stdio_filebuf.h> int main(int argc, char *argv[]) { assert(argc == 2); std::ifstream f(argv[1]); assert(!!f); /* //cin, cout etc __gnu_cxx::stdio_filebuf<char> *stdio_buf = dynamic_cast<__gnu_cxx::stdio_filebuf<char> *>(f.rdbuf()); if (stdio_buf != 0) { printf("your fd is %d\n", stdio_buf->fd()); return EXIT_SUCCESS; } */ std::basic_filebuf<char> *file_buf = dynamic_cast<std::basic_filebuf<char> *>(f.rdbuf()); if (file_buf != 0) { struct to_get_protected_member : public std::basic_filebuf<char> { int fd() { return _M_file.fd(); } }; printf("your fd is %d\n", static_cast<to_get_protected_member *>(file_buf)->fd()); } printf("what is going on?\n"); return EXIT_FAILURE; } 

flush只刷新由标准库代码保存的内部缓冲区。

要刷新操作系统的缓冲区,你需要/想调用FlushFileBuffers调用f.flush() )。