我寻找一种异步和高效地扩展文件的方法。
在一份支持文件中说:
注意:应用程序可以通过使用SetFileValidData函数更改文件的有效数据长度,然后发出一个WriteFile,使前面提到的写操作异步化。
在MSDN中,SetFileValidData是Sets the valid data length of the specified file的一个函数。
但是我仍然不明白什么是“有效数据”,它和文件大小之间有什么区别?
我可以使用SetFilePointerEx和SetEndOfFile来扩展文件大小,但是SetFileValidData是如何做到这一点的
SetFileVal
我正在写一个程序来同时读写一个文件。更具体地说,所有的写操作都是在文件的末尾附加新的数据,而所有的读操作都是读取文件的随机位置。
我正在考虑创建内存映射文件(使用mmap),以便通过追加(模式a in open)实现高效的读取。但是,我认为这是行不通的,因为内存映射的文件不能改变大小*,除非我munmap,然后mmap它。
虽然"munmap然后mmap文件再次“工作,但它有许多缺点。不仅我需要在每次写入后(或每次读取之前)执行2个系统,这会损害性能,munmap之后下一个munmap调用返回的基地址可能与前一个不同。由于我计划让内存中的其他数据结构存储指向此内存映射文件的特定偏移量的
我有一个应用程序使用编年史队列来存储数据。我使用每小时循环来滚动文件。持续的文件大小为1.3 is。当滚动文件时,旧文件大小变为实际大小,新文件大小为1.3 is。 但是我发现当我重新启动应用程序时,历史记录队列会创建一个新的cq4文件,这个大小是1.3 is,旧的文件大小并没有变成实际大小,仍然是1.3 is。 如何实现将较旧的cq4文件大小设置为实际大小,而不是应用程序重启时的1.3 to。当应用程序关闭时,我尝试关闭队列,但它不起作用。 this is file status in my linux server