user11 发表于 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);
}

pusofalse 发表于 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

        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

user11 发表于 2011-10-30 12:49:09

回复 2# pusofalse


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

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

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


原来以为AU3实现不了,刚临时采用了 必须作为管理员或 Administrator 组的成员登录,才能使用 fsutil。管理员权限要获取太麻烦。。

pusofalse 发表于 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

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

      Local $tIOStatus = DllStructCreate("ubyte IOStatus")
      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


现在的代码应该可以了。

user11 发表于 2011-10-30 19:59:38

回复 4# pusofalse

非常感谢超版,,太棒了。。3G 秒杀,瞬间完成。。。

xms77 发表于 2011-10-30 21:11:15

P版果然是强淫啊!膜拜......{:face (52):}

menfan1 发表于 2011-10-31 09:53:48

收藏,备用。。
页: [1]
查看完整版本: [已解决]如何创建一个指定大小的空文件?