Buat file besar dengan cepat di sistem Windows


245

Dalam nada yang sama dengan Cepat membuat file besar di sistem Linux , saya ingin cepat membuat file besar di sistem Windows. Secara umum saya berpikir 5 GB. Konten tidak masalah. Perintah bawaan atau file batch pendek akan lebih disukai, tetapi saya akan menerima aplikasi jika tidak ada cara mudah lainnya.

Jawaban:


399
fsutil file createnew <filename> <length>

di mana <length>dalam byte.

fsutil membutuhkan hak administratif.


6
@ZXX +1 Untuk tujuan saya, saya hanya perlu sistem file untuk melihat ruang sebagai tidak tersedia, tetapi informasi Anda sangat membantu jika orang lain membutuhkan ini.
Leigh Riffel

22
File fsutil yang baru dibuat tidak membuat file yang jarang.
Per Mildner

7
"fsutil sparse setflag temp.txt" mengatur flag sparse, menjadikannya file yang jarang. "fsutil sparse setrange temp.txt 0 1024" menetapkan kisaran sparseness :)
Coldblackice

apakah ada cara tanpa hak administrator?
wizlog

3
@ZXX fsutil file createnewTIDAK membuat file jarang: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

Anda dapat menggunakan alat Sysinternals Contig . Ini memiliki -nsaklar yang membuat file baru dengan ukuran tertentu. Tidak seperti fsutilitu, itu tidak memerlukan hak administratif.


2
Wow! Sangat cepat untuk mengunduh dan menjalankan. Baris yang saya gunakan adalah m: \ contig -n M: \ SpaceBuffer.tmp 5368709120
Leigh Riffel

6
Hanya ingin memeriksa apakah ini file yang jarang atau apakah file tersebut benar-benar memiliki data di dalamnya?
Slolife

2
Ini bukan file yang jarang (sejauh yang saya tahu) dan file tersebut kosong.
Joey

1
Saya bingung di sini ... jika itu instan, dan itu bukan file yang jarang, lalu bagaimana sebenarnya menggunakan ruang disk?
Jason S

2
@JasonS: contigsecara efektif pergi ke byte terakhir dan menulis satu di 0sana (lihat saja dengan Process Monitor). Windows kemudian mengisi sisanya dengan nol. Ini mungkin tentang seefisien yang Anda bisa dapatkan dengan file non-jarang dan pembuatan file berukuran sekitar 5 GiB hanya membutuhkan waktu beberapa detik bahkan pada hard disk saya. Saya kira saat itu saya sudah mencoba pada SSD atau dengan file yang lebih kecil. Tapi ini agak cepat (dan tentunya lebih cepat daripada menulis sendiri semua byte dari file kosong itu.
Joey

23

Saya sedang mencari cara untuk menghasilkan file besar dengan data, bukan hanya file jarang. Datang melintasi teknik di bawah ini :

Jika Anda ingin membuat file dengan data nyata maka Anda dapat menggunakan skrip baris perintah di bawah ini.

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

(Jalankan kedua perintah di atas satu demi satu atau Anda dapat menambahkannya ke file batch.)

Perintah di atas membuat file dummy.txt 1 MB dalam beberapa detik ...


6
Ekstrak dari tautan di atas: Jika Anda ingin membuat file dengan data nyata maka Anda dapat menggunakan skrip baris perintah di bawah ini. 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 (Jalankan kedua perintah di atas satu demi satu atau Anda dapat menambahkannya ke file batch.) Perintah di atas membuat file 1 MB dummy.txt dalam beberapa detik.
Tony Stark

Perhatian: Anda harus menyalin baris pertama terlebih dahulu, tekan Enter dan kemudian salin baris kedua. Saya mencoba menyalin seluruh naskah ke dalam shell saya tetapi tidak ada yang bahagia.
Magiranu

15

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

RDFC mungkin bukan yang tercepat, tetapi tidak mengalokasikan blok data. Yang paling cepat harus menggunakan API tingkat lebih rendah untuk hanya mendapatkan rantai klaster dan memasukkannya ke MFT tanpa menulis data.

Berhati-hatilah karena tidak ada peluru perak di sini - jika "penciptaan" kembali secara instan itu berarti Anda mendapatkan file jarang yang hanya memalsukan file besar, tetapi Anda tidak akan mendapatkan blok data / rantai sampai Anda menulis ke dalamnya. Jika Anda baru saja membaca, Anda akan mendapatkan angka nol yang sangat cepat yang dapat membuat Anda percaya bahwa drive Anda tiba-tiba menjadi sangat cepat :-)


Ini sepertinya jawaban yang terbaik. FSUTIL membuat file jarang yang bukan skenario pengujian yang valid untuk banyak kasus. Sysinternals contig sepertinya tidak pernah bekerja untuk saya, ketika saya menggunakan perintah seperti "contig -n largefile.bin 6000000000 itu membuat file berukuran 1,7GB ... ??? Terima kasih untuk RDFC karena ia bekerja dengan sempurna pada percobaan pertama dan menulis di kecepatan tulis maks disk ATA saya
Syclone0044

Seperti yang telah dikatakan di atas, FSUTIL "createnew" TIDAK membuat file jarang, itu hanya mengalokasikan (dalam MFT) ruang yang diminta untuk file yang diminta, yaitu ruang penuh. Jika Anda kemudian memeriksa properti file, ukuran yang dialokasikan (nama "ukuran pada disk" yang mengganggu dapat pada perangkat apa pun yang belum tentu merupakan "disk") serupa atau sangat dekat dengan ukuran sebenarnya. File jarang yang benar-benar diisi dengan nol akan memiliki ukuran yang dialokasikan sangat kecil. Satu-satunya alat yang saya temukan yang dapat mengubah file non-sparse menjadi file jarang (dan sebenarnya mengurangi ukurannya, bukan hanya menandai itu) adalah SparseTest.
GabrielB

13

Periksa Alat Kit Sumber Daya Windows Server 2003 . Ada utilitas bernama Creatfil.

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

Ini mirip dengan mkfile di Solaris.


1
Saya lebih suka tidak perlu mengunduh kit sumber daya.
Leigh Riffel

Anda hanya perlu 1 exe dari kit sumber daya, Anda tidak harus memiliki semuanya pada sistem produksi Anda.
Byron Whitlock

1
Saya akan mencobanya, tetapi saya lebih suka tidak memiliki ketergantungan file tambahan.
Leigh Riffel

File tersebut tidak diunduh dengan benar untuk saya sekarang, tapi saya tidak bisa membayangkannya lebih cepat daripada alat Contig yang disebutkan oleh Johannes Rossel.
Leigh Riffel

1
Terima kasih! Paket yang diunduh adalah rktools.exe dan 11,7 MB dan 18,2 MB saat diperluas. Oh, dan itu "creatfil.exe" dan bukan "createfil.exe". File ini saja berukuran 5.5 KB dan hanya itu yang Anda butuhkan. Butuh waktu kurang dari 1 menit untuk menghasilkan file 1 GB pada quad core 3.0 GHz Intel cpu. Dengan alat fsutil.exe seperti yang diposting di atas, hanya perlu sepersekian detik untuk membuatnya. Jadi benar, alat itu membuat file jarang. Bahkan lebih besar, ini 73,5 KB. Yang ini lebih baik untuk menghasilkan file besar untuk keperluan pengujian.
Samir

11

Saya membutuhkan file 10 GB biasa untuk pengujian, jadi saya tidak bisa menggunakan fsutilkarena ini membuat file jarang (terima kasih @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

Saya ingin membuat file 10 GB, tetapi karena alasan tertentu hanya muncul sebagai 4 GB, jadi saya ingin aman dan berhenti di 4 GB. Jika Anda benar-benar ingin memastikan file Anda akan ditangani dengan baik oleh sistem operasi dan aplikasi lain, berhentilah mengembangkannya pada 1 GB.


Anda perlu menggunakan karakter persen tunggal, bukan ganda. Selain itu, Anda tidak memerlukan spasi tambahan di dalam tanda kurung. Saya akan mengeditnya untuk Anda.
Samir

Sistem operasi apa yang Anda gunakan di sini sobat? Ini rmadalah perintah Unix / Linux, sedangkan perintah delDOS / Windows? ...
Samir

Apakah ini seharusnya file batch atau Anda seharusnya mengeluarkan perintah ini langsung di cmd? Tanda persen tunggal digunakan dalam cmd, seperti %itetapi dalam file batch Anda menggunakan tanda persen ganda, seperti %%i.
Samir

@ Sammy: Dimulai dengan @echo off, jadi jelas a .bat. Itu sebabnya ada dua persen tanda.
f.ardelian

Baiklah, kalau begitu kita mungkin ingin mengembalikan tanda dua persen. Mengapa Anda menghapus file-4gb.txtsebelum Anda membuatnya? Bukankah itu menghasilkan kesalahan? Apakah Anda benar-benar bermaksud membuat file-4gb.txtdi baris itu? Atau ganti nama file-big.txtfile lama ? Ini tidak jelas, bahkan untuk file batch. Jika Anda bermaksud untuk mengganti namanya, maka perintah yang Anda cari mungkin ren. Seperti ren file-big.txt file-4gb.txt. Saya pikir Anda bingung dengan itu rm.
Samir

7

Buka Windows Task Manager, temukan proses terbesar yang Anda jalankan klik kanan, dan klik Create dump file.

Ini akan membuat file relatif terhadap ukuran proses dalam memori di folder sementara Anda.

Anda dapat dengan mudah membuat file berukuran dalam gigabytes.

Masukkan deskripsi gambar di sini

Masukkan deskripsi gambar di sini


2
solusi bagus! Bermanfaat jika Anda menjalankan berbagai aplikasi, untuk mendapatkan ukuran yang berbeda
Don Cheadle

6

Pendek dari menulis aplikasi lengkap, kami orang-orang Python dapat mencapai file ukuran apa pun dengan empat baris, potongan yang sama pada Windows dan Linux ( os.stat()garis hanya cek):

>>> 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
Menginstal Python untuk menyelesaikan satu masalah benar-benar berlebihan. Mengapa tidak menggunakan sesuatu yang ada di dalamnya seperti Powershell atau C # - gist.github.com/nadams810/6539070 (Anda bahkan tidak memerlukan Visual Studio untuk mengompilasi aplikasi C #).
Natalie Adams

1
.Net, C # dan Powershell tidak harus lintas platform.
gimel

1
Mereka dibangun ke dalam Windows yang merupakan apa yang diminta OP (dengan asumsi sistem Anda sepenuhnya mutakhir).
Natalie Adams

@NatalieAdams Tapi jawaban ini cukup membantu jika Anda sudah menginstal Python untuk menyelesaikan masalah lain. :)
criptych berdiri dengan Monica

6

PowerShell one-liner untuk membuat file C:\Tempuntuk mengisi disk C: hanya menyisakan 10 MB:

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

3
apakah itu akan membuat file dengan beberapa konten nyata atau file jarang?
Samselvaprabu

6

Menggunakan:

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

Apa int? Apakah ini akan berfungsi untuk file 5 GB? Apakah ini terbatas pada 2 atau 4 GB? Parameter ketiga SetFilePointer()adalah 0 berarti tidak akan berfungsi untuk file 5 GB.
Peter Mortensen

4

Saya sedang mencari cara untuk membuat file boneka besar dengan alokasi ruang baru-baru ini. Semua solusi terlihat canggung. Akhirnya saya baru saja memulai DISKPARTutilitas di Windows (tertanam sejak Windows Vista):

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

Di mana MAXIMUM adalah ukuran file yang dihasilkan, 20 GB di sini.


Solusi Terbaik sejauh ini.
Frank FYC

Tidak bekerja untuk saya. Sayangnya tidak ada file yang dibuat. Saya mencoba dengan hak administrator.
Magiranu

4

Saya menemukan sebuah utilitas luar biasa yang dapat dikonfigurasi di https://github.com/acch/genfiles .

Ini mengisi file target dengan data acak, sehingga tidak ada masalah dengan file jarang, dan untuk tujuan saya (pengujian algoritma kompresi) memberikan tingkat kebisingan putih yang bagus.


Utilitas ini adalah aplikasi Java file tunggal yang harus bekerja pada platform apa pun dengan Java.
Paul

@MusikPolice - Tautan sudah mati
dcp

Dicatat. Sayangnya, itu pasti akan terjadi setelah enam tahun.
MusikPolice

3

File temp harus disimpan dalam Folder Windows Temp. Berdasarkan jawaban dari Rod Anda dapat menggunakan liner berikut untuk membuat file temp 5 GB yang mengembalikan nama file

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

Penjelasan:

  • [System.IO.Path]::GetTempFileName() menghasilkan nama file acak dengan ekstensi acak di Windows Temp Folder
  • Pipeline digunakan untuk meneruskan nama [System.IO.File]::Create($_)yang membuat file
  • Nama file diatur ke file yang baru dibuat dengan .SetLength(5gb). Saya sedikit terkejut menemukan, bahwa PowerShell mendukung Byte Conversion , yang sangat membantu.
  • Pegangan file harus ditutup .closeagar aplikasi lain dapat mengaksesnya
  • Dengan ;$_nama file dikembalikan dan dengan | ? { $_ }itu dipastikan bahwa hanya nama file dikembalikan dan bukan string kosong dikembalikan oleh[System.IO.File]::Create($_)

3

Cara paling sederhana yang saya temukan adalah utilitas gratis ini: http://www.mynikko.com/dummy/

Membuat file dummy dengan ukuran sewenang-wenang yang diisi dengan spasi atau diisi dengan konten yang tidak dapat dikompresi (pilihan Anda). Berikut screenshotnya:

masukkan deskripsi gambar di sini


3

Biasa 'C ... ini dibangun di bawah MinGW GCC pada Windows XX dan harus bekerja pada platform C' generik '.

Ini menghasilkan file null dengan ukuran tertentu. File yang dihasilkan BUKAN hanya entri ruang-penghuni direktori, dan pada kenyataannya menempati jumlah byte yang ditentukan. Ini cepat karena tidak ada penulisan aktual terjadi kecuali byte yang ditulis sebelum tutup.

Contoh saya menghasilkan file yang penuh dengan nol - ini bisa bervariasi berdasarkan platform; program ini pada dasarnya mengatur struktur direktori untuk data apa pun yang berkeliaran.

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

Saya sarankan Anda untuk memeriksa bagaimana saya memformat kode Anda. Dan BTW. pertanyaan sudah memiliki jawaban yang sangat bagus, dan fseek + fwrite sudah disajikan di Pyton dan WinAPI jadi ini sedikit membantu. Sangat menyenangkan namun Anda telah memberikan contoh lengkap. +1 untuk itu. Tetapi cobalah untuk tidak menjawab kembali pertanyaan yang sudah dipecahkan, itu hanya buang-buang waktu di mana Anda dapat membantu seseorang sedikit lebih banyak :)
quetzalcoatl

2

Saya menemukan solusi menggunakan DEBUG di http://www.scribd.com/doc/445750/Create-a-Huge-File , tapi saya tidak tahu cara mudah untuk skrip dan sepertinya tidak bisa untuk membuat file yang lebih besar dari 1 GB.


1
Anda tidak bisa membuat 5 file dan kemudian menambahkannya? Buat mereka secara bersamaan menggunakan threading, dan kemudian tambahkan mereka: D
dassouki

Saya tidak tahu apakah saya bisa utas tanpa melakukan pemrograman, tapi ya, saya bisa menyalin file beberapa kali untuk mendapatkan ukuran yang saya butuhkan. Dalam kasus saya, saya tidak perlu file itu sendiri menjadi 5GB, hanya ruang yang digunakan.
Leigh Riffel

2
Menulis ke banyak file menggunakan threading terdengar seperti ide yang buruk, mengingat betapa lambatnya hard drive ... Juga, menambahkannya cukup mahal dalam hal waktu sehingga mungkin gagal dengan kriteria "cepat".
Joey


2

Anda dapat menggunakan perintah PowerShell kucing.

Pertama buat file teks sederhana dengan beberapa karakter. Semakin banyak karakter awal yang Anda masukkan, semakin cepat ia menjadi lebih besar. Sebut saja out.txt. Kemudian di Powershell:

cat out.txt >> out.txt

Tunggu selama itu perlu untuk membuat file cukup besar. Lalu tekan ctrl-c untuk mengakhirinya.


1

Anda dapat mencoba kode C ++ ini:

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

Mungkin perlu beberapa saat untuk menghasilkan tergantung pada kecepatan CPU Anda ...


Poster itu bertanya dengan cepat. Ini membutuhkan penginstalan kompiler C ++.

1

Jawaban sederhana dengan Python: Jika Anda perlu membuat file teks nyata yang besar, saya hanya menggunakan whileloop sederhana dan mampu membuat file 5 GB dalam waktu sekitar 20 detik. Saya tahu ini kasar, tetapi cukup cepat.

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

Cepat dieksekusi atau cepat mengetik pada keyboard? Jika Anda menggunakan Python di Windows, Anda dapat mencoba ini:

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

0

Solusi GUI lain: WinHex.

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

Berlawanan dengan beberapa solusi yang sudah diajukan, itu sebenarnya menulis data (kosong) pada perangkat.

Ini juga memungkinkan untuk mengisi file baru dengan pola yang dipilih atau data acak:

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

-1

Saya telah membuat beberapa tambahan pada fsutilmetode yang sama seperti yang disebutkan dalam jawaban yang dipilih. Ini untuk membuat file dengan banyak ekstensi berbeda dan / atau dari berbagai ukuran.

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

Kode dapat dikloning dari https://github.com/iamakidilam/bulkFileCreater.git

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.