【发布时间】:2010-11-02 05:32:49
【问题描述】:
与 Quickly create a large file on a Linux system 一样, 我想在 Windows 系统上快速创建一个大文件。总的来说,我认为是 5 GB。内容无所谓。内置命令或短批处理文件会更好,但如果没有其他简单的方法,我会接受应用程序。
【问题讨论】:
标签: windows batch-file
与 Quickly create a large file on a Linux system 一样, 我想在 Windows 系统上快速创建一个大文件。总的来说,我认为是 5 GB。内容无所谓。内置命令或短批处理文件会更好,但如果没有其他简单的方法,我会接受应用程序。
【问题讨论】:
标签: windows batch-file
检查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。
【讨论】:
只要写一个完整的应用程序,我们 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
>>>
【讨论】:
我在http://www.scribd.com/doc/445750/Create-a-Huge-File 找到了使用 DEBUG 的解决方案,但我不知道编写脚本的简单方法,而且它似乎无法创建大于 1 GB 的文件。
【讨论】:
您可以使用Sysinternals Contig 工具。它有一个-n 开关,可以创建一个给定大小的新文件。与fsutil 不同,它不需要管理权限。
【讨论】:
contig 有效地转到最后一个字节并在那里写入一个0(只需查看进程监视器)。然后 Windows 用零填充其余部分。这可能与使用非稀疏文件一样有效,即使在我的硬盘上创建一个大小约为 5 GiB 的文件也只需要几秒钟。我想那时我已经尝试过使用 SSD 或较小的文件。但它相当快(而且肯定比自己写空文件的所有字节要快。
用途:
/*
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 文件。
fsutil file createnew <filename> <length>
<length> 以字节为单位。
例如,要创建一个名为“test”的 1MB (Windows MB or MiB) 文件,可以使用此代码。
fsutil file createnew test 1048576
fsutil 需要管理权限。
【讨论】:
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
查看 RDFC http://www.bertel.de/software/rdfc/index-en.html
RDFC 可能不是最快的,但它确实分配了数据块。绝对最快的必须使用较低级别的API来获取集群链并将它们放入MFT而不写入数据。
请注意这里没有灵丹妙药 - 如果“创建”立即返回,则意味着您得到了一个稀疏文件,它只是伪造了一个大文件,但在写入之前您不会得到数据块/链。如果你刚刚读到 is 你会得到非常快的零,这可能会让你相信你的驱动器突然变得非常快:-)
【讨论】:
我正在寻找一种方法来生成包含数据的大文件,而不仅仅是稀疏文件。偶遇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.. " > dummy.txt for /L %i in (1,1,14) do type dummy.txt >> dummy.txt(依次运行以上两个命令,也可以将它们添加到批处理文件中。)以上命令在几秒钟内创建了一个 1 MB 文件 dummy.txt。
我需要一个常规的 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 命令?...
%i,但在批处理文件中使用双百分号,如 %%i。
@echo off 开头,所以显然是.bat。这就是为什么它有双百分号。
file-4gb.txt?这不会导致错误吗?你真的打算在那条线上创建file-4gb.txt 吗?或者重命名旧的file-big.txt 文件?即使对于批处理文件,这也不清楚。如果您打算重命名它,那么您要查找的命令可能是ren。喜欢ren file-big.txt file-4gb.txt。我认为您将其与 rm 混淆了。
我在https://github.com/acch/genfiles 找到了一个出色的实用程序。
它用随机数据填充目标文件,因此稀疏文件没有问题,并且出于我的目的(测试压缩算法),它提供了很好的白噪声水平。
【讨论】:
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);
}
【讨论】:
你可以试试这个 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 速度,生成可能需要一些时间...
【讨论】:
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()
【讨论】:
... 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/
【讨论】:
PowerShell 单线器在C:\Temp 中创建一个文件以填充磁盘 C:只剩下 10 MB:
[io.file]::Create("C:\temp\bigblob.txt").SetLength((gwmi Win32_LogicalDisk -Filter "DeviceID='C:'").FreeSpace - 10MB).Close
【讨论】:
我最近正在寻找一种方法来创建具有空间分配的大型虚拟文件。所有的解决方案看起来都很尴尬。最后,我刚刚在 Windows 中启动了 DISKPART 实用程序(自 Windows Vista 开始嵌入):
DISKPART
CREATE VDISK FILE="C:\test.vhd" MAXIMUM=20000 TYPE=FIXED
其中 MAXIMUM 是生成的文件大小,此处为 20 GB。
【讨论】:
临时文件应存储在 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($_) 返回的空字符串
【讨论】:
快速执行还是快速在键盘上键入?如果你在 Windows 上使用 Python,你可以试试这个:
cmd /k py -3 -c "with open(r'C:\Users\LRiffel\BigFile.bin', 'wb') as file: file.truncate(5 * 1 << 30)"
【讨论】:
我对所选答案中提到的 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
【讨论】:
我发现的最简单的方法是这个免费实用程序:http://www.mynikko.com/dummy/
创建任意大小的虚拟文件,这些虚拟文件要么填充有空格,要么填充有不可压缩的内容(您的选择)。截图如下:
【讨论】:
另一种 GUI 解决方案:WinHex。
“File” > “New” > “Desired file size” = [X]
“File” > “Save as” = [Name]
与一些已经提出的解决方案相反,它实际上是在设备上写入(空)数据。
它还允许用可选模式或随机数据填充新文件:
“Edit” > “Fill file” (or “Fill block” if a block is selected)
【讨论】:
您可以使用 cat powershell 命令。
首先创建一个包含几个字符的简单文本文件。您输入的初始字符越多,它变大的速度就越快。我们称之为 out.txt。然后在 Powershell 中:
cat out.txt >> out.txt
只要需要使文件足够大,请等待。然后按 ctrl-c 结束它。
【讨论】: