如何使用在创建文件时预先分配一定的磁盘空间

frman 2007-02-25 10:17:04
要求使用CRT

之前查了查
fopen()后fseek(),然后再fwrite()一下就好,但这样在给大文件分配空间时太耗时。

有没有什么其他别的方法达到WIN32 SDK里那个SetEndOfFile()的效果?
...全文
687 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
frman 2007-03-01
  • 打赏
  • 举报
回复
谢了
chehw 2007-02-27
  • 打赏
  • 举报
回复
找到一个使用low-level io routine的方法

#include <io.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>

int main()
{
int fh=_open( "1.dat", _O_WRONLY | _O_CREAT, _S_IREAD | _S_IWRITE );
if(-1!=fh)
{
lseek(fh, 1024*1024*1024-1, SEEK_SET);
_write(fh, "\0", 1);
_close(fh);
}
getchar();


return 0;
}

hgyxb 2007-02-26
  • 打赏
  • 举报
回复
setSize不知可不可以
frman 2007-02-26
  • 打赏
  • 举报
回复
那linux下有什么函数可以达到SetEndOfFile()的效果吗?

setSize()是哪里的?

chehw 2007-02-25
  • 打赏
  • 举报
回复
用_chsize也可更改文件大小,效率略高于fseek+fwrite,但远低于SetEndOfFile。

WIN32 API是平台相关的,属于底层实现,用CRT的方法恐怕达不到SetEndOfFile的效率。

frman 2007-02-25
  • 打赏
  • 举报
回复
fopen()后fseek()至指定大小(size-1),然后再fputs()一个字节.

这个不和我说的一样效果?还是要重写一遍,很慢的

============================================================

没法指定特定文件系统,FAT, EXT2都有可能

============================================================

驱动方面的不懂,有必要涉及吗?WIN32 SDK里那个SetEndOfFile()我看效果满好,不知道怎么实现的
luoshayu 2007-02-25
  • 打赏
  • 举报
回复
DeviceIoControl(...,FSCTL_SET_SPARSE,...
luoshayu 2007-02-25
  • 打赏
  • 举报
回复
如果是NTFS系统可以使用sparse file.
chehw 2007-02-25
  • 打赏
  • 举报
回复
fopen()后fseek()至指定大小(size-1),然后再fputs()一个字节.

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧