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


245

在Linux系统上快速创建大文件一样,我想在Windows系统上快速创建大文件。总的来说,我在想5 GB。内容无关紧要。最好使用内置命令或简短的批处理文件,但如果没有其他简便方法,我将接受一个应用程序。

Answers:


399
fsutil file createnew <filename> <length>

其中<length>是以字节为单位。

fsutil 但是需要管理权限。


6
@ZXX +1出于我的目的,我只需要文件系统将空间视为不可用,但是如果其他人需要此信息,则您的信息会有所帮助。
Leigh Riffel

22
FSUTIL文件createnew并没有创建一个稀疏文件。
Per Mildner 2013年

7
“ fsutil sparse setflag temp.txt”设置稀疏标志,使其成为稀疏文件。“ fsutil sparse setrange temp.txt 0 1024”设置稀疏范围:)
Coldblackice

有没有管理员权限的方法吗?
wizlog

3
@ZXX fsutil file createnew不会创建稀疏文件:c:\>fsutil file createnew test.txt 0x100000 File c:\test.txt is created c:\>fsutil sparse queryflag test.txt This file is NOT set as sparse
ivan_pozdeev

36

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


2
哇!下载和运行非常快。我使用的行是m:\ contig -n M:\ SpaceBuffer.tmp 5368709120
Leigh Riffel

6
只想检查这是一个稀疏文件还是该文件中确实有数据?
slolife 2011年

2
这不是一个稀疏文件(据我所知),该文件为空。
乔伊2012年

1
我在这里感到困惑...如果它是瞬时的,并且不是稀疏文件,那么它实际上是如何占用磁盘空间的呢?
詹森·S

2
@JasonS:contig有效地转到最后一个字节,并在其中写入一个单字节0(只需与Process Monitor一起查看)。然后,Windows用零填充其余部分。这可能与使用非稀疏文件可以获得的效率差不多,即使在我的硬盘上,创建大小约为5 GiB的文件也只需几秒钟。我想当时我已经尝试过使用SSD或较小的文件。但这是相当快的(绝对比自己写空文件的所有字节还快。)
Joey

23

我正在寻找一种生成带有数据的大文件的方法,而不仅仅是稀疏文件。遇到以下技术

如果要使用真实数据创建文件,则可以使用以下命令行脚本。

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 ...


6
从上面的链接中提取:如果要创建包含真实数据的文件,则可以使用以下命令行脚本。 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。
托尼·史塔克

注意:必须先复制第一行,然后按Enter键,然后再复制第二行。我尝试将整个脚本复制到我的shell中,但是没有任何障碍。
Magiranu '17

15

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

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

请注意,这里没有灵丹妙药-如果“创建”立即返回,则意味着您有一个稀疏文件,该文件只是伪造一个大文件,但只有写入该文件后,您才能获得数据块/链。如果您只是阅读,您将得到非常快的零,这可能使您相信您的驱动器突然变得非常快:-)


这似乎是最好的答案。FSUTIL创建一个稀疏文件,在许多情况下这不是有效的测试方案。Sysinternals contig似乎从未为我工作,当我使用诸如“ contig -n largefile.bin 6000000000”之类的命令时,它创建的文件大小为1.7GB ... ???感谢RDFC,因为它在第一次尝试时就可以完美地工作并在我的ATA磁盘的最大写入速度
Syclone0044 2013年

如上所述,FSUTIL“ createnew”不会创建稀疏文件,它只是(在MFT中)将请求的空间分配给请求的文件,即完整空间。然后,如果您检查文件的属性,则分配的大小(由于它可以在不一定是“磁盘”的任何设备上使用,因此通常称为“磁盘上的大小”)与实际大小相似或非常接近。完全填充零的真实稀疏文件将具有非常小的分配大小。我发现的唯一可以将非稀疏文件转换为稀疏文件(并实际上减小其大小,而不仅仅是标记它)的工具是SparseTest。
加布里埃尔

13

检查Windows Server 2003资源工具包工具。有一个名为Creatfil的实用程序。

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

它与Solaris上的mkfile相似。


1
我宁愿不必下载资源工具包。
Leigh Riffel

您只需要资源工具包中的1 exe,就不必在生产系统上安装整个程序。
拜伦·惠特洛克

1
我会尝试一下,但是我不希望有其他文件依赖项。
Leigh Riffel

该文件目前无法正确下载,但我无法想象它比Johannes Rossel提到的Contig工具要快。
Leigh Riffel

1
谢谢!下载的程序包是rktools.exe,展开时为11.7 MB和18.2 MB。哦,那是“ creatfil.exe”,而不是“ createfil.exe”。仅此文件大小为5.5 KB,这就是您真正需要的全部。我用不到1分钟的时间就在四核3.0 GHz Intel cpu上生成了1 GB的文件。使用上面发布的fsutil.exe工具,只需几分之一秒即可创建它。没错,该工具会创建稀疏文件。它更大,为73.5 KB。这对于生成大型文件以进行测试更好。
萨米尔

11

我需要一个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。这就是为什么它具有双百分号的原因。
f.ardelian

好了,那么我们可能想带回双百分号。为什么file-4gb.txt在创建之前删除它?那不会导致错误吗?您实际上是要file-4gb.txt在那条线上进行创作吗?还是重命名旧file-big.txt文件?即使对于批处理文件,也不清楚。如果要重命名,则您正在寻找的命令可能是ren。像ren file-big.txt file-4gb.txt。我认为您将其与混淆rm
萨米尔

7

打开Windows Task Manager,右键单击找到您正在运行的最大进程,然后单击 Create dump file

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

您可以轻松创建大小为GB的文件。

在此处输入图片说明

在此处输入图片说明


2
不错的解决方案!如果您正在运行各种应用程序以获取不同的大小
Don Cheadle

6

只需编写一个完整的应用程序,我们的Python专家就可以用四行代码来获得任何大小的文件,在Windows和Linux上使用相同的代码段(该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
>>>

1
安装Python来解决一个问题实在是过大了。为什么不只使用Powershell或C#之类的内置东西-gist.github.com/nadams810/6539070(您甚至不需要Visual Studio来编译C#应用程序)。
Natalie Adams

1
.Net,C#和Powershell不一定是跨平台的。
吉梅尔2013年

1
它们内置在Windows中,这正是OP所要求的(假设您的系统是最新的)。
Natalie Adams

@NatalieAdams但是,如果您已经安装了Python来解决其他问题,那么此答案非常有帮助。:)
criptych与Monica站在

6

PowerShell一线式创建文件C:\Temp以填充磁盘C:仅剩余10 MB:

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

3
它会创建具有真实内容的文件还是稀疏文件?
Samselvaprabu

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

什么int啊 这将适用于5 GB的文件吗?是否限制为2或4 GB?第三个参数SetFilePointer()为0表示它不适用于5 GB的文件。
彼得·莫滕森

4

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

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

其中,最大文件大小为MAXIMUM,此处为20 GB。


迄今为止最好的解决方案。
Frank FYC

对我不起作用。不幸的是,没有文件被创建。我尝试了管理员特权。
Magiranu '17

4

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

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


该实用程序是一个单文件Java应用程序,可以在任何使用Java的平台上运行。
保罗

@MusikPolice -链接死
DCP

注意。不幸的是,这肯定会在六年后发生。
MusikPolice

3

临时文件应存储在Windows临时文件夹中。根据Rod的回答,您可以使用以下一个衬纸创建一个5 GB的临时文件,该文件返回文件名

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

说明:

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

3

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

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

在此处输入图片说明


3

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);
}

我建议您检查一下我如何格式化代码。和顺便说一句。这个问题已经有了一个很好的答案,并且在Pyton和WinAPI中已经提供了fseek + fwrite,所以这无济于事。很好,但是您提供了完整的示例。+1。但是,尽量不要重新回答已经解决的问题,这只是在浪费您可以帮助别人的时间上:)
quetzalcoatl 2012年

2

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


1
您不能创建5个文件然后追加它们吗?使用线程同时创建它们,然后附加它们:D
dassouki

我不知道是否可以在不进行编程的情况下将其线程化,但是可以,我可以复制文件几次以获得所需的大小。就我而言,我不需要文件本身为5GB,仅需要占用的空间即可。
Leigh Riffel

2
考虑到硬盘驱动器有多慢,使用线程写入多个文件听起来是一个可怕的主意。此外,将它们附加在时间上也相当昂贵,因此可能无法通过“快速”标准。
乔伊(Joey)


2

您可以使用cat powershell命令。

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

cat out.txt >> out.txt

等待,直到有必要使文件足够大。然后按ctrl-c结束它。


1

您可以尝试以下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 ++编译器。

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

0

快速执行或快速输入键盘?如果在Windows上使用Python,则可以尝试以下操作:

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

0

另一个GUI解决方案:WinHex。

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

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

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

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

-1

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克隆代码

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.