在Windows系统中快速创建大文件

296

在Linux系统上快速创建大文件类似,我想在Windows系统上快速创建一个大文件。我想要的大小是5GB,内容并不重要。最好使用内置命令或短批处理文件,但如果没有其他简单的方法,我也可以接受应用程序。

24个回答

6

使用:

/*
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;
}

1
什么是 int?这对于一个5 GB的文件有效吗?这是否限制在2或4 GB?SetFilePointer()的第三个参数为0表明它不适用于5 GB的文件。 - Peter Mortensen

6
我发现最简单的方法是使用这个免费实用工具:http://www.mynikko.com/dummy/。它可以创建任意大小的虚拟文件,填充空格或不可压缩内容(由您选择)。以下是该工具的屏幕截图:enter image description here

4

我发现了一个非常好用的工具,可以在https://github.com/acch/genfiles上进行配置。

它可以使用随机数据填充目标文件,因此不会出现稀疏文件的问题。对于我的目的(测试压缩算法),它产生了很好的白噪声水平。


这个实用工具是一个单文件的Java应用程序,可以在任何安装了Java的平台上运行。 - Paul
@MusikPolice - 链接已失效。 - dcp
知道了。不幸的是,这在六年后注定会发生。 - MusikPolice

3

2
你不能创建5个文件然后将它们附加吗?使用线程同时创建它们,然后再附加它们:D - dassouki
我不确定是否需要进行编程才能实现多线程,但是可以复制文件几次以获得所需的大小。在我的情况下,我不需要文件本身达到5GB,只需要占用相应的空间即可。 - Leigh Riffel
2
使用线程将数据写入多个文件听起来像是一个糟糕的主意,因为硬盘速度很慢...此外,在时间方面附加它们相当昂贵,所以这可能无法满足“快速”标准。 - Joey

3

这是一个普通的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已经在Python和WinAPI中被提出来了,所以这并没有太大的帮助。不过,你提供了一个完整的例子,这很好。+1。但是请尽量不要重新回答已经解决的问题,这只是浪费时间,你可以在这段时间里帮助更多的人 :) - quetzalcoatl

3

临时文件应存储在Windows临时文件夹中。根据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 支持字节转换,这非常有帮助。
  • 需要使用 .close 关闭文件句柄以允许其他应用程序访问它。
  • 使用 ;$_ 返回文件名,并使用 | ? { $_ } 确保只返回文件名,而不是由 [System.IO.File]::Create($_) 返回的空字符串。

2

...在几秒钟内上传一个大小为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/,这是关于如何创建大型虚拟文件的技术内容。

2
您可以尝试这段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速度,生成可能需要一些时间...

1
海报迅速提问。这需要安装C++编译器。 - user1537415

2
你可以使用cat Powershell命令。
首先创建一个包含几个字符的简单文本文件。你输入的初始字符越多,它就会变得更快更大。我们称之为out.txt。然后在Powershell中:
cat out.txt >> out.txt

等待足够长的时间,使文件变得足够大。然后按下Ctrl-C结束它。


我认为这很聪明,但是 cat: ..txt: input file is output file - sdgfsdh
cat dummy1.txt >> dummy2.txt && cat dummy2.txt >> dummy1.txt - sdgfsdh

1

在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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接