找回密码
 加入
搜索
查看: 3638|回复: 6

[AU3基础] [已解决]如何创建一个指定大小的空文件?

  [复制链接]
发表于 2011-10-30 11:08:10 | 显示全部楼层 |阅读模式
本帖最后由 user11 于 2011-10-30 20:01 编辑

比如迅雷下载,得到文件大小以后,就会在硬盘生成一个和源一样大小的空文件,

AU3如何实现 创建 指定大小的空文件,要求文件的创建速度,,越快越好。。。

翻遍了帮助,百度谷歌 也没有找到 au3 可以实现的。。。
C/C++ code

void CreateMyFile(szFileName, nFileLength)
{
   FILE* fp = fopen("szFileName", "wb+"); // 创建文件
   fseek(fp, nFileLength-1, SEEK_SET);    // 将文件的指针 移至 指定大小的位置
   fputc(EOF, fp);                        // 在要指定大小文件的末尾随便放一个数据
   fclose(fp);
}
发表于 2011-10-30 11:58:06 | 显示全部楼层
本帖最后由 pusofalse 于 2011-10-30 11:59 编辑


Func _CreateMyFile($sFilePath, $iFileSize, $fFailIfExists = 1)
        Local $iFlags = ($fFailIfExists = 0) + 1

        Local $hFile = DllCall("Kernel32.dll", "handle", "CreateFileW", "wstr", $sFilePath, "dword", 0xC0000000, "dword", 3, "ptr", 0, "dword", $iFlags, "dword", 0, "handle", 0)
        $hFile = $hFile[0]

        If ($hFile = -1) Then Return SetError(1, 0, 0)

        DllCall("Kernel32.dll", "long", "SetFilePointer", "handle", $hFile, "long", $iFileSize, "ptr", 0, "long", 0)
        DllCall("Kernel32.dll", "bool", "SetEndOfFile", "handle", $hFile)

        DllCall("Kernel32.dll", "bool", "CloseHandle", "handle", $hFile)

        Return 1
EndFunc        ;==>_CreateMyFile

评分

参与人数 1贡献 +5 收起 理由
lynfr8 + 5

查看全部评分

 楼主| 发表于 2011-10-30 12:49:09 | 显示全部楼层
回复 2# pusofalse


非常感谢超版,,测试了一下,,可以用,

但是文件最大只能生成 1.99GB,文件大小设置再大,就无效了?

我需要一次可以生成 3G以上文件一个,准备写个qq旋风刷分工具, 下载3g以上文件,一次200积分,每日上限200,一次搞定,


原来以为AU3实现不了,刚临时采用了 必须作为管理员或 Administrator 组的成员登录,才能使用 fsutil。管理员权限要获取太麻烦。。
发表于 2011-10-30 16:18:15 | 显示全部楼层
本帖最后由 pusofalse 于 2011-10-30 16:21 编辑

回复 3# user11


   
Func _CreateMyFile($sFilePath, $iFileSize, $fFailIfExists = 1)
        Local $iFlags = ($fFailIfExists = 0) + 1
 
        Local $hFile = DllCall("Kernel32.dll", "handle", "CreateFileW", "wstr", $sFilePath, "dword", 0xC0000000, "dword", 3, "ptr", 0, "dword", $iFlags, "dword", 0, "handle", 0)
        $hFile = $hFile[0]
 
        If ($hFile = -1) Then Return SetError(1, 0, 0)
 
        Local $tIOStatus = DllStructCreate("ubyte IOStatus[64]")
        Local $pIOStatus = DllStructGetPtr($tIOStatus)
 
        DllCall("Ntdll.dll", "long", "NtSetInformationFile", "handle", $hFile, "ptr", $pIOStatus, "int64*", $iFileSize, "long", 8, "long", 20)
        DllCall("Kernel32.dll", "bool", "CloseHandle", "handle", $hFile)
 
        Return 1
EndFunc ;==>_CreateMyFile


现在的代码应该可以了。

评分

参与人数 1贡献 +5 收起 理由
lynfr8 + 5

查看全部评分

 楼主| 发表于 2011-10-30 19:59:38 | 显示全部楼层
回复 4# pusofalse

非常感谢超版,,太棒了。。3G 秒杀,瞬间完成。。。
发表于 2011-10-30 21:11:15 | 显示全部楼层
P版果然是强淫啊!膜拜......
发表于 2011-10-31 09:53:48 | 显示全部楼层
收藏,备用。。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-6 03:11 , Processed in 0.093255 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表