微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在写入文件之前预留磁盘空间以提高效率

当我第一次启用日志loggingfunction时,我注意到我的一个项目中有一个巨大的性能问题。 但是,当达到日志文件限制并且程序开始再次写入文件的开始时,日志logging速度要快得多(大约快50%)。 将日志文件大小设置为数百MB是正常的。

大多数下载pipe理器在开始下载文件之前分配具有所需大小的虚拟文件。 这使得写入更加有效,因为整个块被一次分配。

当我的程序第一次启动时,以某种固定大小有效地保留磁盘空间的最佳方法是什么?

如何通过Windows API生成证书签名请求?

我如何检测从Windows文件的更改?

窗口象征性的链接目标

在Windows上安装Github-“价值不在预期的范围内”

SetwindowPos()不移动或调整窗口大小

RFCOMM连接工作不稳定

delphi – 给pipe理员权限的应用程序

所有Windows浏览器上的Typekit和@fontface问题都使用Ruby on Rails应用程序,尤其是Chrome

使用chrome.hid和认的Windows 7 HID驱动程序从Wiimote发送或接收数据不起作用

如何检查电脑显示器打开或closures在Windows 7中的任何工具或事件查看器

void ReserveSpace(LONG spaceLow,LONG spaceHigh,HANDLE hFile) { DWORD err = ::SetFilePointer(hFile,spaceLow,&spaceHigh,FILE_BEGIN); if (err == INVALID_SET_FILE_POINTER) { err = GetLastError(); // handle error } if (!::SetEndOfFile(hFile)) { err = GetLastError(); // handle error } err = ::SetFilePointer(hFile,FILE_BEGIN); // reset }

wRAR是正确的。 用你最喜欢的库打开一个文件,然后寻找倒数第二个字节并在那里写一个0。 这应该分配所有需要的磁盘空间。

这是一个简单的功能,可用于任何大小的文件

void SetFileSize(HANDLE hFile,LARGE_INTEGER size) { SetFilePointer(hFile,size,NULL,FILE_BEGIN); SetEndOfFile(hFile); }

您可以使用SetFileValidData函数来扩展文件的逻辑长度,而不必将所有数据写出到磁盘。 但是,因为它可以允许读取您可能没有权限的磁盘数据,所以需要使用SE_MANAGE_VOLUME_NAME权限。 仔细阅读文档的“备注”部分。

SetFileValidData的实现依赖于fs驱动程序。 Win7以后,NTFS只支持它和FAT。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐