Windowsシステムで大きなファイルをすばやく作成する


245

同じ静脈ではすぐには、Linuxシステム上の大きなファイルを作成し、私はすぐにWindowsシステム上で大きなファイルを作成したいと思います。概して私は5 GBを考えています。内容は関係ありません。組み込みコマンドまたは短いバッチファイルが望ましいですが、他に簡単な方法がない場合は、アプリケーションを受け入れます。

回答:


399
fsutil file createnew <filename> <length>

どこ<length>バイトです。

fsutil ただし、管理者権限が必要です。


6
@ZXX +1私の目的では、スペースを使用不可として表示するためにファイルシステムが単に必要でしたが、他の誰かがこれを必要とする場合、あなたの情報は役に立ちます。
リーリフェル

22
fsutil file createnewはスパースファイルを作成しませ
ミルドナーによる2013年

7
「fsutil sparse setflag temp.txt」はスパースフラグを設定し、スパースファイルにします。「fsutil sparse setrange temp.txt 0 1024」は、
スパースネスの

管理者権限がない方法はありますか?
wizlog 2017

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
(私の知る限り)スパースファイルではなく、ファイルは空です。
Joey

1
私はここで混乱しています...それが瞬間的で、それがスパースファイルでない場合、実際にどのようにディスク領域を使い果たしますか?
ジェイソンS

2
@JasonS:contig効果的に最後のバイトに移動し、0そこにシングルを書き込みます(プロセスモニターで確認するだけです)。その後、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

(上記の2つのコマンドを順番に実行するか、バッチファイルに追加できます。)

上記のコマンドは、数秒以内に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 (上記の2つのコマンドを次々に実行するか、バッチファイルに追加できます。)上記のコマンドは、数秒以内に1 MBのファイルdummy.txtを作成します。
トニースターク

注意:最初の行を最初にコピーし、Enterキーを押してから、2行目をコピーする必要があります。スクリプト全体をシェルにコピーしてみましたが、何も起こりませんでした。
Magiranu 2017年

15

RDFCをチェックhttp://www.bertel.de/software/rdfc/index-en.html

RDFCはおそらく最速ではありませんが、データブロックを割り当てます。最速の方法は、クラスターチェーンを取得してデータを書き込まずにMFTに入れるために、低レベルのAPIを使用することです。

ここに特効薬はないことに注意してください。「作成」がすぐに返された場合、大きなファイルを偽装したスパースファイルを取得しますが、書き込むまでデータブロック/チェーンを取得できません。読んだだけの場合、非常に高速なゼロが得られるため、ドライブが突然すべて高速になったと信じることができます:-)


これが最良の答えのようです。FSUTILは、多くの場合に有効なテストシナリオではないスパースファイルを作成します。「contig -n largefile.bin 6000000000のようなコマンドを使用すると、サイズが1.7GBのファイルが作成されるSysinternals contigが機能しないようです。 ATAディスクの最大書き込み速度
Syclone0044

上で述べたように、FSUTIL“ createnew”はスパースファイルを作成せず、要求されたスペースを(MFTで)要求されたファイル、つまり全スペースに割り当てるだけです。次にファイルのプロパティを確認すると、割り当てられたサイズ(「ディスク」とは限らない任意のデバイス上にある可能性があるため、「ディスク上のサイズ」と名付けられました)は実際のサイズに近いか非常に近いです。完全にゼロで埋められた実際のスパースファイルの割り当てサイズは非常に小さくなります。非スパースファイルをスパースファイルに変換できる唯一のツールは、SparseTestだけです。
GabrielB

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
リソースキットをダウンロードする必要はありません。
リーリフェル

リソースキットの1つのexeファイルだけが必要です。実稼働システムにすべてのものを持っている必要はありません。
Byron Whitlock

1
私は試してみるつもりですが、追加のファイル依存関係はありません。
リーリフェル

現在、ファイルは正しくダウンロードされていませんが、Johannes Rosselが述べたContigツールよりも高速であるとは思えません。
リーリフェル

1
ありがとう!ダウンロードしたパッケージはrktools.exeで、展開すると11.7 MBと18.2 MBになります。ああ、それは「creatfil.exe」ではなく「creatfil.exe」です。このファイルのみのサイズは5.5 KBで、これだけで十分です。クアッドコア3.0 GHz Intel CPUで1 GBのファイルを生成するのに1分もかかりませんでした。上記のfsutil.exeツールを使用すると、ほんの数秒で作成できます。つまり、そのツールはスパースファイルを作成します。さらに大きく、73,5 KBです。これは、テスト目的で大きなファイルを生成するのに適しています。
Samir 2013年

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での展開を停止してください。


二重ではなく単一のパーセント文字を使用する必要があります。また、括弧内に余分なスペースは必要ありません。それを編集します。
Samir 2013年

ここで使用したオペレーティングシステムは何ですか?これrmはUnix / Linuxコマンドdelですが、DOS / Windowsコマンドですか?...
Samir

これはバッチファイルであるはずですか、またはこれらのコマンドをcmdで直接発行するはずですか?cmdではシングルパーセント記号が使用され%iますが、バッチファイルではダブルパーセント記号が使用されます%%i
Samir 2013年

@サミー:で始まる@echo offので、明らかに.batです。そのため、パーセント記号が2倍になりました。
f.ardelian 2013年

では、パーセント記号を2倍に戻したいと思います。file-4gb.txt作成する前になぜ削除するのですか?それはエラーになりませんか?実際file-4gb.txtにそのラインで作成するつもりでしたか?または、古いfile-big.txtファイルの名前を変更しますか?これは、バッチファイルの場合でも不明確です。名前を変更するつもりなら、探していたコマンドはおそらくrenです。のようにren file-big.txt file-4gb.txt。あなたはそれをと混同したと思いますrm
Samir

7

Windowsタスクマネージャーを開き、右クリックで実行している最大のプロセスを見つけて、をクリックしCreate dump fileます。

これにより、一時フォルダー内のメモリ内のプロセスのサイズに関連するファイルが作成されます。

ギガバイト単位のファイルを簡単に作成できます。

ここに画像の説明を入力してください

ここに画像の説明を入力してください


2
素敵な解決策!さまざまなアプリケーションを実行している場合に、さまざまなサイズを取得するのに
役立ちます

6

完全なアプリケーションを作成する前に、Pythonの人たちは、WindowsとLinuxで同じスニペットである4行で任意のサイズのファイルを実現できます(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
1つの問題を解決するためにPythonをインストールするのは、本当にやり過ぎです。PowershellやC#などの組み込みのものを使用しないのはなぜですか-gist.github.com/nadams810/6539070(C#アプリケーションをコンパイルするのにVisual Studioも必要ありません)。
Natalie Adams

1
.Net、C#、Powershellは必ずしもクロスプラットフォームではありません。
ギメル

1
それらは、OPが要求したWindowsに組み込まれています(システムが完全に最新の場合)
ナタリーアダムス

@NatalieAdamsしかし、他の問題を解決するためにすでにPythonをインストールしている場合、この回答非常に役立ちます。:)
クリプティクは、モニカの

6

C:\TempディスクCを埋めるためにファイルを作成するPowerShellワンライナー:10 MBのみを残します:

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

3
実際のコンテンツまたはスパースファイルを含むファイルを作成しますか?
Samselvaprabu 2017

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 GBまたは4 GBに制限されていますか?の3番目のパラメーターSetFilePointer()が0であることは、5 GBのファイルでは機能しないことを示しています。
Peter Mortensen

4

最近、スペースを割り当てて大きなダミーファイルを作成する方法を探していました。すべてのソリューションは扱いにくいように見えます。最後にDISKPART、Windowsでユーティリティを開始しました(Windows Vista以降に組み込まれています)。

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

どこ最大値は、ここで結果のファイルのサイズは20 GBです。


これまでのベストソリューション。
Frank FYC、2017年

うまくいきません。残念ながらファイルは作成されません。管理者権限で試しました。
Magiranu 2017年

4

https://github.com/acch/genfilesで設定可能な優れたユーティリティを見つけました。

ターゲットファイルをランダムデータで満たすため、スパースファイルに問題はありません。また、私の目的(圧縮アルゴリズムのテスト)では、適切なレベルのホワイトノイズが得られます。


このユーティリティは、Javaを使用するすべてのプラットフォームで動作する単一ファイルのJavaアプリケーションです。
ポール・

@MusikPolice -リンクは死んでいる
DCP

了解しました。残念ながら、それは6年後に起こるはずです。
MusikPolice

3

一時ファイルはWindowsの一時フォルダに保存する必要があります。Rodからの回答に基づいて次の1つのライナーを使用して、ファイル名を返す5 GBの一時ファイルを作成できます。

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

説明:

  • [System.IO.Path]::GetTempFileName() Windows Tempフォルダにランダムな拡張子のランダムなファイル名を生成します
  • Pipelineは[System.IO.File]::Create($_)、ファイルを作成する名前を渡すために使用されます
  • ファイル名は、で新しく作成されたファイルに設定されます.SetLength(5gb)。PowerShellがバイト変換をサポートしていることを発見して、私は少し驚きました。これは本当に便利です。
  • .close他のアプリケーションがアクセスできるようにするには、ファイルハンドルを閉じる必要があります
  • ;$_ファイル名が返されてそして| ? { $_ }それはファイル名だけが返されることが確実とされていない空の文字列が返されたことにより、[System.IO.File]::Create($_)

3

私が見つけた最も簡単な方法は、この無料のユーティリティです:http : //www.mynikko.com/dummy/

スペースまたは非圧縮コンテンツ(選択)で埋められた任意のサイズのダミーファイルを作成します。これがスクリーンショットです:

ここに画像の説明を入力してください


3

プレーンol 'C ...これは、Windows XXのMinGW GCCの下で構築され、あらゆる「汎用」Cプラットフォームで動作するはずです。

指定されたサイズのnullファイルを生成します。結果のファイルは、単なるディレクトリスペース占有エントリではなく、指定されたバイト数を実際に占有します。閉じる前に書き込まれたバイトを除いて、実際の書き込みは発生しないため、これは高速です。

私のインスタンスはゼロでいっぱいのファイルを生成します-これはプラットフォームによって異なる可能性があります。このプログラムは基本的に、データがぶら下がっているすべてのディレクトリ構造を設定します。

#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。しかし、すでに解決された質問に再回答しないようにしてください。誰かをもう少し助けることができる時間の浪費です:)
quetzalcoatl

2

http://www.scribd.com/doc/445750/Create-a-Huge-FileでDEBUGを使用した解決策を見つけましたが、簡単なスクリプトの作成方法がわからず、実行できないようです。 1 GBより大きいファイルを作成します。


1
5つのファイルを作成してから追加できませんか?スレッドを使用してそれらを同時に作成し、それらを追加します:D
dassouki

プログラミングせずにスレッド化できるかどうかはわかりませんが、はい、ファイルを数回コピーして必要なサイズを取得できます。私の場合、ファイル自体を5GBにする必要はなく、スペースを使い果たしただけです。
リーリフェル

2
スレッドを使用して複数のファイルに書き込むことは、ハードドライブの速度が非常に遅いことを考えると、ひどい考えのように聞こえます。
ジョーイ


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ループを使用しただけで、5 GBのファイルを約20秒で作成できました。私はそれが粗雑であることを知っていますが、それは十分に速いです。

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から複製できます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.