如何快速创建垃圾文件

afeng302 2005-03-10 12:50:14
在一个项目中需要频繁创建几百M的垃圾文件(只关心文件大小,不关心文件内容)。尝试了很多方法,比如调用windows API:CreateFile(), SetFilePointer(), SendEndOfFile(), CloseHandle(),调用库函数chsize()等,创建速度都比较慢。

观察到windows在拷贝文件的过程是先“分配”一个与目标文件一样大小的文件,再“慢慢”往这个文件里写入数据,还有BT下载文件时也是类似的过程。而且无论文件多大,这个“分配”文件的过程都非常之迅速,通常在1秒以内。想借鉴这个“分配”文件的机制,盼高人指点迷津!
...全文
149 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
afeng302 2005-03-11
  • 打赏
  • 举报
回复


项目方案涉及商业机密,恕不如实奉告!
但是非常愿意从技术角度与各位继续探讨,该技术可以由内存映射文件实现。
感谢yjh1982、oyljerry的友情提醒,实现代码如下:

INT CreateDumpFile(string strFileName, DWORD dwFileSize)
{
HANDLE hFile;
HANDLE hMaping;
DWORD bRet;

hFile = CreateFile(strFileName.c_str(),
GENERIC_WRITE|GENERIC_READ,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,
CREATE_ALWAYS,
FILE_FLAG_SEQUENTIAL_SCAN,
NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
bRet = GetLastError();
return FAIL;
}

hMaping = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0,
dwFileSize, NULL);
if (hMaping == NULL)
{
bRet = GetLastError();
return FAIL;
}
CloseHandle(hFile);
CloseHandle(hMaping);
return OK;
}
lyr311 2005-03-10
  • 打赏
  • 举报
回复
高深!!就是,BT就是这样搞的◎◎
tianhxk 2005-03-10
  • 打赏
  • 举报
回复
memset全给弄成一样的
superxxm 2005-03-10
  • 打赏
  • 举报
回复
haha ,是不是要做病毒啊?
QunKangLi 2005-03-10
  • 打赏
  • 举报
回复
目的不明,动机不纯,拒绝回答!
yjh1982 2005-03-10
  • 打赏
  • 举报
回复
内存映射如何?
nik_Amis 2005-03-10
  • 打赏
  • 举报
回复
...
linao 2005-03-10
  • 打赏
  • 举报
回复
试试临时文件

GetTempFileName()
chun79 2005-03-10
  • 打赏
  • 举报
回复
项目要骗人???
diaoni 2005-03-10
  • 打赏
  • 举报
回复
晕,你的项目是想干什么的?

oyljerry 2005-03-10
  • 打赏
  • 举报
回复
内存文件映射

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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