creatFile()生成文件,能指定大小,再问,有方法 能指定它存储的物理位置吗?(有点过分) (100分)

  • 主题发起人 主题发起人 yxjdelphi
  • 开始时间 开始时间
Y

yxjdelphi

Unregistered / Unconfirmed
GUEST, unregistred user!
也开一个害人贴,如何不被发觉在别人的电脑上写个很大的文件,要硬盘闪的不厉害,一会随几一闪。<br><br>基本是控制拷贝的进程。隔段时间挂起一会,对吧?<br><br><br>另外:大家用的断点续传工具都会在确定到文件后在硬盘上建立一个文件。这个文件大小和要下载的一样,它是怎么实现的?Createfile()只可以生成一个文件,有哪个函数可以指定大小的?不会是从头到尾写上那么多0吧?而且,你看NETANTS,瞬间硬盘上就有个大文件了!!赐教!<br>
 
把他硬盘灯的线给拨了!呵呵!
 
建立一个隐含目录。<br>5分钟创建一个文件。或者使用流的技术。5分钟读一定的百分比,追加到文件后面。
 
用网际快车来下电影,我就没怎么发现硬盘灯在闪
 
网际快车 每秒才写多点东西啊。就是因为我说的一个道理,每次写的东西很少。下载好了,到内存后,再写。
 
我用网际快车 下载硬盘直叫唤
 
還要請注意隱藏好進程。
 
网际快车在接收到文件大小以后,会往硬盘里狂写东西,一个700M的电影,它要很长一段时间没有响应。
 
又改了一下,这回能指定要建文件的大小了(以字节为单位,不过不是很准认真看一下就会明白为什么,不要系只是做坏事不是吗?)和追加文件块的大小(以字节为单位且是128的倍数),修正了原来硬盘满后会出错的BUG(就是用了(Num&lt;&gt;nBlockNum来实现的),指定文件大小的关键是i*128*nBlockNum&gt;=nFileSize这一句.;加入了命令行支持功能.<br><br>program BigFile;<br>uses SysUtils;<br>procedure CreateSilFile(FileName:String;nFileSize:Longint=38400;nBlockNum:Integer=300;nSleepTime:Integer=0);<br>var<br>&nbsp; UnTypedFile:file;<br>&nbsp; i:Longint;<br>&nbsp; Num:Integer;<br>begin<br>&nbsp; i:=0;<br>&nbsp; assignfile(UnTypedFile,FileName);<br>&nbsp; Rewrite(UnTypedFile);<br>&nbsp; try<br>&nbsp; &nbsp; repeat<br>&nbsp; &nbsp; &nbsp; Try<br>&nbsp; &nbsp; &nbsp; &nbsp; BlockWrite(UnTypedFile,[0..128],nBlockNum,Num);<br>&nbsp; &nbsp; &nbsp; &nbsp; i:=i+1;<br>&nbsp; &nbsp; &nbsp; except<br>&nbsp; &nbsp; &nbsp; end;<br>&nbsp; &nbsp; &nbsp; if nSleepTime&lt;&gt;0 then<br>&nbsp; &nbsp; &nbsp; &nbsp; Sleep(nSleepTime);<br>&nbsp; &nbsp; until (i*128*nBlockNum&gt;=nFileSize) or (Num&lt;&gt;nBlockNum);<br>&nbsp; finally<br>&nbsp; &nbsp; CloseFile(UnTypedFile);<br>&nbsp; end;<br>end;<br><br>begin<br>&nbsp; if ParamStr(4)&lt;&gt;'' then &nbsp; &nbsp;CreateSilFile(ParamStr(1),StrToInt64(ParamStr(2)),StrToInt(ParamStr(3)),StrToInt(ParamStr(4)))<br>&nbsp; else<br>&nbsp; &nbsp; if ParamStr(3)&lt;&gt;'' then<br>&nbsp; &nbsp; &nbsp; CreateSilFile(ParamStr(1),StrToInt64(ParamStr(2)),StrToInt(ParamStr(3)))<br>&nbsp; &nbsp; else<br>&nbsp; &nbsp; &nbsp; if ParamStr(2)&lt;&gt;'' then<br>&nbsp; &nbsp; &nbsp; &nbsp; CreateSilFile(ParamStr(1),StrToInt64(ParamStr(2)))<br>&nbsp; &nbsp; &nbsp; else<br>&nbsp; &nbsp; &nbsp; &nbsp; if ParamStr(1)&lt;&gt;'' then<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CreateSilFile(ParamStr(1))<br>&nbsp; &nbsp; &nbsp; &nbsp; else<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CreateSilFile('C:/300.txt',30000000,300,50);<br>end.<br>
 
文件映射 新建文件可以制定大小 具体参考MDSN CreateFileMapping
 
用文件流类很方便<br>fsFile:TFileStream;<br>fsFile:=TFileStream.Create();<br>fsFile.Size:=$00FFFFFF;<br>fsFile.Free;
 
瞬间生成100M的文件:<br><br>var<br>&nbsp; fh:integer;<br>begin<br>fh:=_lcreat('c:/see',0);<br>_llseek(fh,100*1024*1024,FILE_BEGIN);<br>_lwrite(fh,nil,0);<br>_lclose(fh);<br>end;<br><br><br>
 
楼上正解,用:<br>with TFileStream.Create(FileName,fmCreate) do<br>try<br>&nbsp; Size := Your File Size;<br>finally<br>&nbsp; Free;<br>end;
 
function CreateFileOnDisk(FileName: string; Size: Int64): Boolean;<br>{<br>&nbsp; 在硬盘上面快速创建指定文件大小的文件,支持超大文件<br>&nbsp; 成功返回True,若文件不存在或磁盘空间不足返回False<br>&nbsp; 注意:TFileStream不支持超过2GB的文件,本函数可以超过2GB的文件<br>}<br>var<br>&nbsp; F: HFILE;<br>begin<br>&nbsp; Result := not FileExists(FileName);<br>&nbsp; if Result then<br>&nbsp; begin<br>&nbsp; &nbsp; F := FileCreate(FileName, 0);<br>&nbsp; &nbsp; SetFilePointer(F, Int64Rec(Size).Lo, @Int64Rec(Size).Hi, FILE_BEGIN);<br>&nbsp; &nbsp; SetEndOfFile(F);<br>&nbsp; &nbsp; Result := GetLastError = 0;<br>&nbsp; &nbsp; FileClose(F);<br>&nbsp; end;<br>end;<br>
 
存储的物理位置,指什么
 
硬盘上的位置
 
多人接受答案了。
 
后退
顶部