【问题标题】:Quickly create large file on a Windows system在 Windows 系统上快速创建大文件
【发布时间】:2010-11-02 05:32:49
【问题描述】:

Quickly create a large file on a Linux system 一样, 我想在 Windows 系统上快速创建一个大文件。总的来说,我认为是 5 GB。内容无所谓。内置命令或短批处理文件会更好,但如果没有其他简单的方法,我会接受应用程序。

【问题讨论】:

    标签: windows batch-file


    【解决方案1】:

    检查Windows Server 2003 Resource Kit Tools。有一个名为 Creatfil 的实用程序。

     CREATFIL.EXE
     -? : This message
     -FileName -- name of the new file
     -FileSize -- size of file in KBytes, default is 1024 KBytes
    

    类似于 Solaris 上的 mkfile。

    【讨论】:

    • 我宁愿不用下载资源包。
    • 您只需要资源工具包中的 1 个 exe,您不必在生产系统上安装全部内容。
    • 我会试一试,但我宁愿没有额外的文件依赖。
    • 我现在无法正确下载该文件,但我无法想象它比 Johannes Rossel 提到的 Contig 工具更快。
    • 谢谢!下载的包是 rktools.exe,展开后分别为 11.7 MB 和 18.2 MB。哦,那是 "creatfil.exe" 而不是 "c​​reatefil.exe"。仅此文件就有 5.5 KB 大小,这就是您真正需要的。我用了不到 1 分钟的时间在四核 3.0 GHz Intel cpu 上生成了一个 1 GB 的文件。使用上面发布的 fsutil.exe 工具,创建它只需几分之一秒。确实,该工具会创建稀疏文件。它更大,为 73.5 KB。这个更适合生成用于测试目的的大文件。
    【解决方案2】:

    只要写一个完整的应用程序,我们 Python 人就可以用四行实现任意大小的文件,在 Windows 和 Linux 上相同的 sn-p(os.stat() 行只是一个检查):

    >>> f = open('myfile.txt','w')
    >>> f.seek(1024-1) # an example, pick any size
    >>> f.write('\x00')
    >>> f.close()
    >>> os.stat('myfile.txt').st_size
    1024L
    >>>
    

    【讨论】:

    • 安装 Python 来解决一个问题实在是大材小用。为什么不直接使用内置的东西,例如 Powershell 或 C# - gist.github.com/nadams810/6539070(你甚至不需要 Visual Studio 来编译 C# 应用程序)。
    • 它们内置在 Windows 中,这是 OP 要求的(假设您的系统完全是最新的)。
    • @NatalieAdams 但是如果您已经安装了 Python 来解决其他问题,这个答案非常有用。 :)
    【解决方案3】:

    我在http://www.scribd.com/doc/445750/Create-a-Huge-File 找到了使用 DEBUG 的解决方案,但我不知道编写脚本的简单方法,而且它似乎无法创建大于 1 GB 的文件。

    【讨论】:

    • 你不能创建 5 个文件然后追加它们吗?使用线程同时创建它们,然后附加它们:D
    • 我不知道是否可以在不进行编程的情况下对其进行线程化,但是可以,我可以将文件复制几次以获得所需的大小。在我的情况下,我不需要文件本身是 5GB,只需要空间用完。
    • 考虑到硬盘驱动器的速度有多慢,使用线程写入多个文件听起来像是一个糟糕的主意......此外,附加它们在时间方面相当昂贵,因此可能不符合“快速”标准。
    【解决方案4】:

    您可以使用Sysinternals Contig 工具。它有一个-n 开关,可以创建一个给定大小的新文件。与fsutil 不同,它不需要管理权限。

    【讨论】:

    • 哇!下载和运行速度非常快。我使用的行是 m:\contig -n M:\SpaceBuffer.tmp 5368709120
    • 只是想检查这是一个稀疏文件还是文件中实际上有数据?
    • 它不是一个稀疏文件(据我所知)并且文件是空的。
    • 我在这里很困惑......如果它是瞬时的,并且它不是稀疏文件,那么它实际上是如何占用磁盘空间的?
    • @JasonS: contig 有效地转到最后一个字节并在那里写入一个0(只需查看进程监视器)。然后 Windows 用零填充其余部分。这可能与使用非稀疏文件一样有效,即使在我的硬盘上创建一个大小约为 5 GiB 的文件也只需要几秒钟。我想那时我已经尝试过使用 SSD 或较小的文件。但它相当快(而且肯定比自己写空文件的所有字节要快。
    【解决方案5】:

    用途:

    /*
    Creates an empty file, which can take all of the disk
    space. Just specify the desired file size on the
    command line.
    */
    
    #include <windows.h>
    #include <stdlib.h>
    
    int main (int argc, char* ARGV[])
    {
        int size;
        size = atoi(ARGV[1]);
        const char* full = "fulldisk.dsk";
        HANDLE hf = CreateFile(full,
                               GENERIC_WRITE,
                               0,
                               0,
                               CREATE_ALWAYS,
                               0,
                               0);
        SetFilePointer(hf, size, 0, FILE_BEGIN);
        SetEndOfFile(hf);
        CloseHandle(hf);
        return 0;
    }
    

    【讨论】:

    • 什么是int?这适用于 5 GB 的文件吗?这是否限制为 2 或 4 GB? SetFilePointer() 的第三个参数为 0 表明它不适用于 5 GB 文件。
    【解决方案6】:
    fsutil file createnew <filename> <length>
    

    &lt;length&gt; 以字节为单位。

    例如,要创建一个名为“test”的 1MB (Windows MB or MiB) 文件,可以使用此代码。

    fsutil file createnew test 1048576
    

    fsutil 需要管理权限。

    【讨论】:

    • @ZXX +1 出于我的目的,我只需要文件系统将空间视为不可用,但如果其他人需要,您的信息会很有帮助。
    • fsutil file createnew 创建稀疏文件。
    • "fsutil sparse setflag temp.txt" 设置稀疏标志,使其成为稀疏文件。 "fsutil sparse setrange temp.txt 0 1024" 设置稀疏范围:)
    • @ZXX fsutil file createnew 不会创建稀疏文件:c:\&gt;fsutil file createnew test.txt 0x100000 File c:\test.txt is created c:\&gt;fsutil sparse queryflag test.txt This file is NOT set as sparse
    • 这在技术上可能不是一个稀疏文件,但创建一个 500GB 的文件只需不到一秒钟的时间(即使是在一个有点故障的硬盘上)。如果你想真正触发 500GB 的磁盘 IO(就像我做的那样),这个命令不是。
    【解决方案7】:

    查看 RDFC http://www.bertel.de/software/rdfc/index-en.html

    RDFC 可能不是最快的,但它确实分配了数据块。绝对最快的必须使用较低级别的API来获取集群链并将它们放入MFT而不写入数据。

    请注意这里没有灵丹妙药 - 如果“创建”立即返回,则意味着您得到了一个稀疏文件,它只是伪造了一个大文件,但在写入之前您不会得到数据块/链。如果你刚刚读到 is 你会得到非常快的零,这可能会让你相信你的驱动器突然变得非常快:-)

    【讨论】:

    • 这似乎是最好的答案。 FSUTIL 创建一个稀疏文件,在许多情况下这不是一个有效的测试场景。 Sysinternals contig 似乎对我不起作用,当我使用“contig -n largefile.bin 6000000000”之类的命令时,它会创建一个 1.7GB 大小的文件...??? 感谢 RDFC,因为它在第一次尝试时就完美运行并写入我的 ATA 磁盘的最大写入速度。
    • 正如上面所说,FSUTIL “createnew” 不会创建稀疏文件,它只是将(在 MFT 中)请求的空间分配给请求的文件,即完整空间。如果您然后检查文件的属性,分配的大小(令人讨厌的称为“磁盘上的大小”,因为它可以在任何不一定是“磁盘”的设备上)与实际大小相似或非常接近。一个完全用零填充的真正稀疏文件将具有非常小的分配大小。我发现的唯一可以将非稀疏文件转换为稀疏文件(并实际上减小其大小,而不仅仅是标记它)的工具是 SparseTest。
    【解决方案8】:

    我正在寻找一种方法来生成包含数据的大文件,而不仅仅是稀疏文件。偶遇the below technique

    如果你想创建一个包含真实数据的文件,那么你可以使用下面的命令行脚本。

    echo "This is just a sample line appended to create a big file.. " > dummy.txt
    for /L %i in (1,1,14) do type dummy.txt >> dummy.txt
    

    (依次运行以上两个命令,也可以将它们添加到批处理文件中。)

    上述命令在几秒钟内创建了一个 1 MB 的 dummy.txt 文件...

    【讨论】:

    • 从上面的链接中提取:如果你想创建一个包含真实数据的文件,那么你可以使用下面的命令行脚本。 echo "This is just a sample line appended to create a big file.. " &gt; dummy.txt for /L %i in (1,1,14) do type dummy.txt &gt;&gt; dummy.txt(依次运行以上两个命令,也可以将它们添加到批处理文件中。)以上命令在几秒钟内创建了一个 1 MB 文件 dummy.txt。
    • 注意:必须先复制第一行,回车,再复制第二行。我尝试将整个脚本复制到我的 shell 中,但什么也没发生。
    【解决方案9】:

    我需要一个常规的 10 GB 文件进行测试,所以我不能使用 fsutil,因为它会创建稀疏文件(感谢 @ZXX)。

    @echo off
    
    :: Create file with 2 bytes
    echo.>file-big.txt
    
    :: Expand to 1 KB
    for /L %%i in (1, 1, 9) do type file-big.txt>>file-big.txt
    
    :: Expand to 1 MB
    for /L %%i in (1, 1, 10) do type file-big.txt>>file-big.txt
    
    :: Expand to 1 GB
    for /L %%i in (1, 1, 10) do type file-big.txt>>file-big.txt
    
    :: Expand to 4 GB
    del file-4gb.txt
    for /L %%i in (1, 1, 4) do type file-big.txt>>file-4gb.txt
    
    del file-big.txt
    

    我想创建一个 10 GB 的文件,但由于某种原因它只显示为 4 GB,所以我想确保安全并停止在 4 GB。如果您确实想确保操作系统和其他应用程序能够正确处理您的文件,请停止将其扩展至 1 GB。

    【讨论】:

    • 您需要使用单个百分号,而不是双倍。此外,您不需要括号中的额外空格。我会为你编辑。
    • 你在这里使用什么操作系统? rm 是 Unix/Linux 命令,而 del 是 DOS/Windows 命令?...
    • 这应该是一个批处理文件还是你应该直接在 cmd 中发出这些命令?在 cmd 中使用单百分号,如 %i,但在批处理文件中使用双百分号,如 %%i
    • @Sammy:它以@echo off 开头,所以显然是.bat。这就是为什么它有双百分号。
    • 好的,那么我们可能想要恢复双百分号。为什么在创建之前删除file-4gb.txt?这不会导致错误吗?你真的打算在那条线上创建file-4gb.txt 吗?或者重命名旧的file-big.txt 文件?即使对于批处理文件,这也不清楚。如果您打算重命名它,那么您要查找的命令可能是ren。喜欢ren file-big.txt file-4gb.txt。我认为您将其与 rm 混淆了。
    【解决方案10】:

    我在https://github.com/acch/genfiles 找到了一个出色的实用程序。

    它用随机数据填充目标文件,因此稀疏文件没有问题,并且出于我的目的(测试压缩算法),它提供了很好的白噪声水平。

    【讨论】:

    • 这个实用程序是一个单文件 Java 应用程序,应该可以在任何 Java 平台上运行。
    • @MusikPolice - 链接已失效
    • 注明。不幸的是,这肯定会在六年后发生。
    【解决方案11】:

    Plain ol' C... 这是在 Windows XX 上的 MinGW GCC 下构建的,应该可以工作 在任何“通用”C 平台上。

    它生成一个指定大小的空文件。结果文件不仅仅是一个目录空间占用条目,实际上占用了指定的字节数。这很快,因为除了关闭之前写入的字节之外没有实际的写入发生。

    我的实例生成一个全零的文件 - 这可能因平台而异;这 程序本质上为挂起的任何数据设置目录结构 周围。

    #include <stdio.h>
    #include <stdlib.h>
    
    FILE *file;
    
    int main(int argc, char **argv)
    {
        unsigned long  size;
    
        if(argc!=3)
        {
            printf("Error ... syntax: Fillerfile  size  Fname \n\n");
            exit(1);
        }
    
        size = atoi(&*argv[1]);
    
        printf("Creating %d byte file '%s'...\n", size, &*argv[2]);
    
        if(!(file = fopen(&*argv[2], "w+")))
        {
            printf("Error opening file %s!\n\n", &*argv[2]);
            exit(1);
        }
    
        fseek(file, size-1, SEEK_SET);
        fprintf(file, "%c", 0x00);
        fclose(file);
    }
    

    【讨论】:

    • 我建议你检查我是如何格式化你的代码的。顺便说一句。这个问题已经有了一个很好的答案,并且 fseek+fwrite 已经在 Pyton 和 WinAPI 中出现了,所以这没什么帮助。很好,但是您提供了一个完整的示例。为此+1。但是尽量不要重新回答已经解决的问题,这只是浪费你可以帮助别人更多的时间:)
    【解决方案12】:

    你可以试试这个 C++ 代码:

    #include<stdlib.h>
    #include<iostream>
    #include<conio.h>
    #include<fstream>
    #using namespace std;
    
    int main()
    {
        int a;
        ofstream fcout ("big_file.txt");
        for(;;a += 1999999999){
            do{
                fcout << a;
            }
            while(!a);
        }
    }
    

    根据您的 CPU 速度,生成可能需要一些时间...

    【讨论】:

    • 发帖人连忙问道。这需要安装 C++ 编译器。
    【解决方案13】:

    Python 中的简单答案:如果您需要创建一个大的真实文本文件,我只使用了一个简单的 while 循环,并且能够在大约 20 秒内创建一个 5 GB 的文件。我知道它很粗糙,但它已经足够快了。

    outfile = open("outfile.log", "a+")
    
    def write(outfile):
        outfile.write("hello world hello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello world"+"\n")
        return
    
    i=0
    while i < 1000000:
        write(outfile)
        i += 1
    outfile.close()
    

    【讨论】:

      【解决方案14】:

      ... 1 MB 文件 dummy.txt 在几秒钟内。

      echo "This is just a sample line appended to create a big file.. " > dummy.txt for /L %i in (1,1,14) do type dummy.txt >> dummy.txt
      

      请看这里:http://www.windows-commandline.com/how-to-create-large-dummy-file/

      【讨论】:

        【解决方案15】:

        打开Windows任务管理器,找到你正在运行的最大进程右键,点击Create dump file

        这将在您的临时文件夹中创建一个相对于内存中进程大小的文件。

        您可以轻松创建以千兆字节为单位的文件。

        【讨论】:

        • 不错的解决方案!如果您正在运行各种应用程序以获取不同的大小,这很有帮助
        【解决方案16】:

        PowerShell 单线器在C:\Temp 中创建一个文件以填充磁盘 C:只剩下 10 MB:

        [io.file]::Create("C:\temp\bigblob.txt").SetLength((gwmi Win32_LogicalDisk -Filter "DeviceID='C:'").FreeSpace - 10MB).Close
        

        【讨论】:

        • 它会创建一些真实内容的文件还是稀疏文件?
        【解决方案17】:

        我最近正在寻找一种方法来创建具有空间分配的大型虚拟文件。所有的解决方案看起来都很尴尬。最后,我刚刚在 Windows 中启动了 DISKPART 实用程序(自 Windows Vista 开始嵌入):

        DISKPART
        CREATE VDISK FILE="C:\test.vhd" MAXIMUM=20000 TYPE=FIXED
        

        其中 MAXIMUM 是生成的文件大小,此处为 20 GB。

        【讨论】:

        • 迄今为止最好的解决方案。
        • 对我不起作用。不幸的是,没有创建文件。我尝试了管理员权限。
        【解决方案18】:

        临时文件应存储在 Windows 临时文件夹中。基于the answer from Rod,您可以使用以下一行创建一个 5 GB 的临时文件,该文件返回文件名

        [System.IO.Path]::GetTempFileName() | % { [System.IO.File]::Create($_).SetLength(5gb).Close;$_ } | ? { $_ }
        

        解释:

        • [System.IO.Path]::GetTempFileName() 在 Windows 临时文件夹中生成带有随机扩展名的随机文件名
        • 管道用于将名称传递给创建文件的[System.IO.File]::Create($_)
        • 文件名设置为新创建的文件.SetLength(5gb)。我有点惊讶地发现,PowerShell 支持Byte Conversion,这真的很有帮助。
        • 需要使用.close 关闭文件句柄以允许其他应用程序访问它
        • ;$_ 返回文件名,| ? { $_ } 确保只返回文件名而不是[System.IO.File]::Create($_) 返回的空字符串

        【讨论】:

          【解决方案19】:

          快速执行还是快速在键盘上键入?如果你在 Windows 上使用 Python,你可以试试这个:

          cmd /k py -3 -c "with open(r'C:\Users\LRiffel\BigFile.bin', 'wb') as file: file.truncate(5 * 1 << 30)"
          

          【讨论】:

            【解决方案20】:

            我对所选答案中提到的 fsutil 方法做了一些补充。 这是为了创建许多不同扩展名和/或各种大小的文件。

            set file_list=avi bmp doc docm docx eps gif jpeg jpg key m4v mov mp4 mpg msg nsf odt pdf png pps ppsx ppt pptx rar rtf tif tiff txt wmv xls xlsb xlsm xlsx xps zip 7z
            set file_size= 1
            for %%f in (%file_list%) do (
            fsutil file createnew valid_%%f.%%f %file_size%
            ) > xxlogs.txt
            

            代码可以从https://github.com/iamakidilam/bulkFileCreater.git克隆

            【讨论】:

              【解决方案21】:

              我发现的最简单的方法是这个免费实用程序:http://www.mynikko.com/dummy/

              创建任意大小的虚拟文件,这些虚拟文件要么填充有空格,要么填充有不可压缩的内容(您的选择)。截图如下:

              【讨论】:

                【解决方案22】:

                另一种 GUI 解决方案:WinHex。

                “File” > “New” > “Desired file size” = [X]
                “File” > “Save as” = [Name]
                

                与一些已经提出的解决方案相反,它实际上是在设备上写入(空)数据。

                它还允许用可选模式或随机数据填充新文件:

                “Edit” > “Fill file” (or “Fill block” if a block is selected)
                

                【讨论】:

                  【解决方案23】:

                  您可以使用 cat powershell 命令。

                  首先创建一个包含几个字符的简单文本文件。您输入的初始字符越多,它变大的速度就越快。我们称之为 out.txt。然后在 Powershell 中:

                  cat out.txt >> out.txt
                  

                  只要需要使文件足够大,请等待。然后按 ctrl-c 结束它。

                  【讨论】:

                    猜你喜欢
                    • 2010-09-20
                    • 1970-01-01
                    • 1970-01-01
                    • 2012-04-07
                    • 2013-05-22
                    • 2010-10-02
                    • 1970-01-01
                    • 2012-03-31
                    相关资源
                    最近更新 更多