Bir Windows sisteminde hızlı bir şekilde büyük dosya oluşturun


Yanıtlar:


399
fsutil file createnew <filename> <length>

nerede <length>bayt olduğunu.

fsutil olsa da yönetici ayrıcalıkları gerektirir.


6
@ZXX +1 Benim amacım için sadece boşluğun kullanılamadığını görmek için dosya sistemine ihtiyacım vardı, ancak başka birinin buna ihtiyacı varsa bilgileriniz yardımcı olur.
Leigh Riffel

22
fsutil file createnew yok değil seyrek dosya oluşturun.
Mildner Per

7
"fsutil sparse setflag temp.txt", seyrek bayrağı ayarlayarak seyrek bir dosya yapar. "fsutil seyrek setrange temp.txt 0 1024" seyreklik aralığını belirler :)
Coldblackice

yönetici ayrıcalıkları olmayan bir yol var mı?
wizlog

3
@ZXX fsutil file createnewseyrek dosyalar oluşturmaz: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 aracını kullanabilirsiniz . -nBelirli bir boyutta yeni bir dosya oluşturan bir anahtara sahiptir. Bunun aksine fsutil, yönetici ayrıcalıkları gerektirmez.


2
Vaov! İndirmek ve çalıştırmak çok hızlı. Kullandığım satır m: \ contig -n M: \ SpaceBuffer.tmp 5368709120
Leigh Riffel

6
Bunun seyrek bir dosya olup olmadığını veya dosyanın içinde gerçekten veri olup olmadığını kontrol etmek mi istiyorsunuz?
slolife

2
Seyrek bir dosya değil (bildiğim kadarıyla) ve dosya boş.
Joey

1
Burada kafam karıştı ... eğer anlıksa ve seyrek bir dosya değilse, o zaman disk alanını nasıl kullanır?
Jason S

2
@JasonS: contigetkin bir şekilde son bayta gider ve 0orada bir tek yazar (sadece Process Monitor ile bakın). Windows daha sonra geri kalanı sıfırlarla doldurur. Bu muhtemelen seyrek olmayan dosyalarla alabileceğiniz kadar etkilidir ve yaklaşık 5 GiB boyutunda bir dosyanın oluşturulması sabit diskimde bile sadece birkaç saniye sürer. Sanırım o zaman bir SSD veya daha küçük dosyalarla denedim. Ancak boş dosyanın tüm baytlarını kendiniz yazmaktan oldukça hızlı (ve kesinlikle daha hızlı)
Joey

23

Sadece seyrek dosya değil, veri ile büyük dosyalar oluşturmak için bir yol arıyordum. Aşağıdaki tekniği karşıladı :

Gerçek verilerle bir dosya oluşturmak istiyorsanız, aşağıdaki komut satırı komut dosyasını kullanabilirsiniz.

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

(Yukarıdaki iki komutu birbiri ardına çalıştırın veya bunları bir toplu iş dosyasına ekleyebilirsiniz.)

Yukarıdaki komutlar birkaç saniye içinde 1 MB dummy.txt dosyası oluşturur ...


6
Yukarıdaki bağlantıdan ayıkla: Gerçek verilerle bir dosya oluşturmak istiyorsanız, aşağıdaki komut satırı komut dosyasını kullanabilirsiniz. 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 (Yukarıdaki iki komutu birbiri ardına çalıştırın veya bunları bir toplu iş dosyasına ekleyebilirsiniz.) Yukarıdaki komutlar birkaç saniye içinde 1 MB'lik bir dummy.txt dosyası oluşturur.
Tony Stark

Dikkat: Önce ilk satırı kopyalamanız, Enter tuşuna basmanız ve ardından ikinci satırı kopyalamanız gerekir. Tüm betiği kabuğuma kopyalamayı denedim ama hiçbir şey olmadı.
Magiranu

15

RDFC'ye bakın http://www.bertel.de/software/rdfc/index-en.html

RDFC muhtemelen en hızlı değildir, ancak veri bloklarını ayırır. Kesinlikle en hızlı, sadece küme zincirlerini elde etmek ve bunları MFT'ye koymak için daha düşük seviyeli API kullanmak zorunda kalacak veri yazmadan .

Burada gümüş mermi olmadığına dikkat edin - eğer "yaratılış" anında dönerse, bu sadece büyük bir dosyayı taklit eden seyrek bir dosyaya sahip olduğunuz anlamına gelir, ancak içine yazana kadar veri blokları / zincirleri alamazsınız. Sadece okuduysanız, sürücünüzün birdenbire inanılmaz derecede hızlı olduğuna inanmanızı sağlayacak çok hızlı sıfırlar elde edersiniz :-)


Bu en iyi cevap gibi görünüyor. FSUTIL, pek çok durumda geçerli bir test senaryosu olmayan seyrek bir dosya oluşturur. Sysinternals contig benim için hiçbir zaman işe yaramıyor gibi görünüyor, "contig -n largefile.bin 6000000000 gibi bir komut kullandığımda boyutu 1,7 GB bir dosya oluşturur ... ??? RDFC için teşekkürler çünkü mükemmel çalıştı ve ATA
diskimin

Yukarıda söylendiği gibi, FSUTIL “createnew” seyrek dosyalar oluşturmaz, sadece istenen alanı (MFT'de) istenen dosyaya, yani tam alanı tahsis eder. Daha sonra dosyanın özelliklerini kontrol ederseniz, tahsis edilen boyut (rahatsız edici bir şekilde “disk üzerinde olması gerekmeyen herhangi bir cihazda olabileceği gibi rahatsız edici bir şekilde“ disk üzerinde boyut ”olarak adlandırılır) gerçek boyuta benzer veya çok yakındır. Tamamen sıfırlarla dolu gerçek bir seyrek dosya, çok küçük bir ayrılmış boyuta sahip olacaktır. Seyrek olmayan bir dosyayı seyrek bir dosyaya dönüştürebildiğim (ve aslında boyutunu küçültmek, sadece işaretlemek değil) SparseTest.
GabrielB

13

Kontrol , Windows Server 2003 Kaynak Seti Araçları . Creatfil adlı bir yardımcı program var.

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

Solaris'teki mkfile ile benzerdir.


1
Kaynak kitini indirmek istemem.
Leigh Riffel

sadece kaynak setinden 1 exe'ye ihtiyacınız olacak, üretim sisteminizde her şeye sahip olmak zorunda değilsiniz.
Byron Whitlock

1
Bunu deneyeceğim, ancak ek dosya bağımlılığına sahip olmayı tercih etmem.
Leigh Riffel

Dosya benim için doğru şekilde indirilmiyor, ancak Johannes Rossel'in bahsettiği Contig aracından daha hızlı olduğunu düşünemiyorum.
Leigh Riffel

1
Teşekkürler! İndirilen paket rktools.exe ve genişletildiğinde 11.7 MB ve 18.2 MB. Oh, ve bu "creatfil.exe" değil, "createfil.exe" değil. Bu dosya tek başına 5.5 KB boyutunda ve ihtiyacınız olan tek şey bu. Dört çekirdekli 3.0 GHz Intel işlemci üzerinde 1 GB'lık bir dosya oluşturmak 1 dakikadan kısa sürdü. Yukarıda yayınlanan fsutil.exe aracıyla, oluşturmak için yalnızca bir saniyenin bir kısmını alır. Yani doğru, bu araç seyrek dosyalar yaratıyor. Daha da büyük, 73,5 KB. Bu, test amacıyla büyük dosyalar oluşturmak için daha iyidir.
Samir

11

Test için 10 GB'lık normal bir dosyaya ihtiyacım vardı, bu yüzden fsutilseyrek dosyalar oluşturduğundan kullanamadım (teşekkürler @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'lık bir dosya oluşturmak istedim, ancak bir nedenden dolayı sadece 4 GB olarak ortaya çıktı, bu yüzden güvende olmak ve 4 GB'de durmak istedim. Dosyanızın işletim sistemi ve diğer uygulamalar tarafından düzgün bir şekilde işleneceğinden emin olmak istiyorsanız, 1 GB'de genişletmeyi durdurun.


Çifte değil, tek bir yüzde karakteri kullanmanız gerekir. Ayrıca, parantez içindeki fazladan boşluklara da ihtiyacınız yoktur. Bunu senin için düzenleyeceğim.
Samir

Burada hangi işletim sistemini kullandınız dostum? rmİken, Unix / Linux komut olduğunu del? Bir DOS / Windows komut ve ...
Samir

Bu bir toplu iş dosyası mı yoksa bu komutları doğrudan cmd cinsinden mi yayınlamanız gerekiyor? Tek yüzde işareti cmd cinsinden kullanılır, %iancak bir toplu iş dosyasında yüzde çift işareti kullanırsınız %%i.
Samir

@Sammy: Şununla başlar @echo off, bu yüzden a .bat. Bu yüzden yüzde iki işareti vardı.
f.ardelian

Tamam, o zaman yüzde çift işaretini geri getirmek isteyebiliriz. Oluşturmadan file-4gb.txtönce neden siliyorsunuz ? Bu hataya neden olmaz mı? Aslında file-4gb.txtbu çizgi üzerinde mi yaratmak istediniz ? Veya eski file-big.txtdosyayı yeniden adlandır ? Bu bir toplu iş dosyası için bile net değildir. Yeniden adlandırmak istiyorsanız, aradığınız komut muhtemelen ren. Gibi ren file-big.txt file-4gb.txt. Bence bunu karıştırdın rm.
Samir

7

Windows Görev Yöneticisi'ni açın, sağ tıklattığınız en büyük işlemi bulun ve tıklayın Create dump file .

Bu, geçici klasörünüzdeki bellekteki işlem boyutuna göre bir dosya oluşturur.

Gigabayt olarak boyutlandırılmış bir dosya kolayca oluşturabilirsiniz.

Resim açıklamasını buraya girin

Resim açıklamasını buraya girin


2
güzel bir çözüm! Farklı boyutlar elde etmek için çalışan çeşitli uygulamalarınız varsa
Don Cheadle

6

Tam bir uygulama yazmadan, biz Python çocuklar dört satır, Windows ve Linux üzerinde aynı snippet ile herhangi bir boyutta dosyaları elde edebilirsiniz ( os.stat()satır sadece bir çek):

>>> 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
Bir problemi çözmek için Python'u kurmak gerçekten aşırıya kaçıyor. Neden sadece Powershell veya C # gibi yerleşik bir şey kullanmıyorsunuz - gist.github.com/nadams810/6539070 (C # uygulamalarını derlemek için Visual Studio'ya bile ihtiyacınız yok).
Natalie Adams

1
.Net, C # ve Powershell mutlaka platformlar arası değildir.
gimel

1
Bunlar OP'nin istediği Windows'a yerleştirilmiştir (sisteminizin tamamen güncel olduğunu varsayarak).
Natalie Adams

@NatalieAdams Ama bu cevap olduğunu zaten Python diğer sorunların çözümü için yüklü var ise oldukça yararlı. :)
criptych,

6

PowerShell tek astar, C:\TempC diskini doldurmak için bir dosya oluşturmak için : sadece 10 MB bırakarak:

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

3
bazı gerçek içerik veya seyrek dosya ile dosya oluşturacak mı?
Samselvaprabu

6

kullanın:

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

Nedir int? Bu 5 GB'lık bir dosya için çalışır mı? Bu 2 veya 4 GB ile sınırlı mı? Üçüncü parametrenin SetFilePointer()0 olması, 5 GB'lık bir dosya için çalışmayacağını gösterir.
Peter Mortensen

4

Son zamanlarda alan tahsisi ile büyük bir kukla dosya oluşturmak için bir yol arıyordum. Tüm çözümler garip görünüyor. Son olarak DISKPART, Windows'da (Windows Vista'dan beri gömülü) yardımcı programı başlattım :

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

Nerede MAKSİMUM çıkan dosya boyutu, burada 20 GB olabilir.


Şimdiye kadarki en iyi çözüm.
Frank FYC

Benim için çalışmıyor. Maalesef dosya oluşturulmadı. Yönetici ayrıcalıklarıyla denedim.
Magiranu

4

Https://github.com/acch/genfiles adresinde yapılandırılabilen mükemmel bir yardımcı program buldum .

Hedef dosyayı rastgele verilerle doldurur, bu nedenle seyrek dosyalarla ilgili hiçbir sorun yoktur ve benim amacım (sıkıştırma algoritmalarını test etmek) için güzel bir beyaz gürültü seviyesi verir.


Bu yardımcı program, Java ile herhangi bir platformda çalışması gereken tek bir dosya Java uygulamasıdır.
Paul

@MusikPolice - Bağlantı öldü
dcp

Kayıt edilmiş. Ne yazık ki, bu altı yıl sonra gerçekleşmek zorunda.
MusikPolice

3

Temp dosyaları Windows Temp Klasöründe saklanmalıdır. Rod'un cevabına dayanarak, dosya adını döndüren 5 GB'lik bir geçici dosya oluşturmak için aşağıdaki bir astarı kullanabilirsiniz

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

Açıklama:

  • [System.IO.Path]::GetTempFileName() Windows Temp Klasöründe rastgele uzantıya sahip rastgele bir dosya adı oluşturur
  • Pipeline, adı geçmek için kullanılır. [System.IO.File]::Create($_) dosyayı oluşturan
  • Dosya adı, ile yeni oluşturulan dosyaya ayarlanır .SetLength(5gb). PowerShell'in Byte Conversion'u desteklediğini keşfetmek beni biraz şaşırttı gerçekten yararlı olan .
  • Dosya tanıtıcısının kapatılması gerekiyor .closeDiğer uygulamaların erişmesine izin vermek gerekir
  • İle ;$_dosya adı döndürülür ve | ? { $_ }yalnızca dosya adı döndürülür garanti edilmektedir ve olmayan boş bir dize tarafından döndürülen[System.IO.File]::Create($_)

3

Bulduğum en basit yol bu ücretsiz yardımcı program: http://www.mynikko.com/dummy/

Boşluklarla doldurulan veya sıkıştırılamayan içerikle (seçiminiz) doldurulan rastgele boyutta sahte dosyalar oluşturur. İşte bir ekran görüntüsü:

resim açıklamasını buraya girin


3

Düz ol 'C ... Bu, Windows XX üzerinde MinGW GCC altında inşa edilir ve herhangi bir' genel 'C platformunda çalışmalıdır.

Belirtilen boyutta boş bir dosya oluşturur. Ortaya çıkan dosya sadece bir dizin alanı işgalci girişi DEĞİLDİR ve aslında belirtilen bayt sayısını işgal eder. Bu hızlıdır çünkü kapanmadan önce yazılan bayt dışında hiçbir gerçek yazma gerçekleşmez.

Örneğim sıfırlarla dolu bir dosya üretir - bu platforma göre değişebilir; bu program temelde veri asılı ne olursa olsun dizin yapısını ayarlar.

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

Kodunuzu nasıl biçimlendirdiğimi kontrol etmenizi öneririm. Ve BTW. sorunun zaten çok iyi bir cevabı var ve fseek + fwrite zaten Pyton ve WinAPI'da sunuldu, bu yüzden bu biraz yardımcı olmadı. Tam bir örnek vermiş olmanız güzel. Bunun için +1. Ama zaten çözülmüş soruları tekrar cevaplamamaya çalışın, sadece biraz daha birine yardım edebileceğiniz zaman kaybı :)
quetzalcoatl

2

Http://www.scribd.com/doc/445750/Create-a-Huge-File adresinde DEBUG kullanarak bir çözüm buldum , ancak komut dosyası oluşturmanın kolay bir yolunu bilmiyorum ve mümkün görünmüyor 1 GB'den büyük dosyalar oluşturmak için.


1
5 dosya oluşturup ekleyemiyor musunuz? İş parçacığı kullanarak eşzamanlı olarak oluşturun ve sonra ekleyin: D
dassouki

Programlama yapmadan iş parçacığı olup olmadığını bilmiyorum, ama evet, ihtiyacım olan boyutu almak için dosyayı birkaç kez kopyalayabilirim. Benim durumumda dosyanın 5GB olması gerekmiyor, sadece kullanılan alan.
Leigh Riffel

2
Sabit disklerin ne kadar yavaş olduğu göz önüne alındığında, iş parçacığı seslerini kullanarak birden fazla dosyaya yazmak korkunç bir fikir gibi ... Ayrıca, bunları eklemek zaman açısından oldukça pahalıdır, böylece muhtemelen "hızlı" kriterleri geçemez.
Joey


2

Cat powershell komutunu kullanabilirsiniz.

Önce birkaç karakterden oluşan basit bir metin dosyası oluşturun. Ne kadar çok ilk karakter girerseniz, o kadar hızlı büyür. Haydi diyelim ..txt. Sonra Powershell'de:

cat out.txt >> out.txt

Dosyayı yeterince büyük hale getirmek için gerekli olduğu sürece bekleyin. Sonra bitirmek için ctrl-c tuşlarına basın.


1

Bu C ++ kodunu deneyebilirsiniz:

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

Belki CPU hızınıza bağlı olarak üretmek biraz zaman alabilir ...


Poster çabucak sordu. Bu, bir C ++ derleyicisinin yüklenmesini gerektirir.

1

Python'da basit cevap: Büyük bir gerçek metin dosyası oluşturmanız gerekiyorsa, sadece basit bir whiledöngü kullandım ve yaklaşık 20 saniyede 5 GB dosya oluşturabildim. Kaba olduğunu biliyorum, ama yeterince hızlı.

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

Çalıştırmak hızlı mı yoksa klavyede hızlı yazmak mı? Windows'ta Python kullanıyorsanız bunu deneyebilirsiniz:

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

0

Başka bir GUI çözümü: WinHex.

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

Önceden önerilen çözümlerin aksine, aslında (boş) verileri cihaza yazar.

Ayrıca yeni dosyayı seçilebilir bir desen veya rastgele verilerle doldurmaya izin verir:

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

-1

fsutilSeçilen cevapta belirtilen yöntemle bazı eklemeler yaptım . Bu, birçok farklı uzantıya ve / veya çeşitli boyutlara sahip dosyalar oluşturmaktır.

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

Kod https://github.com/iamakidilam/bulkFileCreater.git adresinden klonlanabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.