Nhanh chóng tạo tệp lớn trên hệ thống Windows


Câu trả lời:


399
fsutil file createnew <filename> <length>

trong đó <length>là bằng byte.

fsutil đòi hỏi đặc quyền hành chính mặc dù.


6
@ZXX +1 Đối với mục đích của tôi, tôi chỉ cần hệ thống tệp để xem không gian là không có sẵn, nhưng thông tin của bạn rất hữu ích nếu người khác cần điều này.
Leigh Riffel

22
tập tin fsutil createnew không tạo ra một tập tin thưa thớt.
Per Mildner

7
"fsutil thưa thớt setflag temp.txt" đặt cờ thưa thớt, biến nó thành một tệp thưa thớt. "fsutil thưa thớt setrange temp.txt 0 1024" thiết lập phạm vi thưa thớt :)
Coldblackice

Có cách nào mà không có đặc quyền của quản trị viên?
wizlog

3
@ZXX fsutil file createnewKHÔNG tạo các tệp thưa thớt: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

Bạn có thể sử dụng công cụ Sysiternals Contig . Nó có một -ncông tắc tạo ra một tệp mới có kích thước nhất định. Không giống như fsutil, nó không yêu cầu đặc quyền hành chính.


2
Ồ Rất nhanh để tải về và chạy. Dòng tôi đã sử dụng là m: \ contig -n M: \ SpaceBuffer.tmp 5368709120
Leigh Riffel

6
Chỉ muốn kiểm tra xem đây là một tập tin thưa thớt hay tập tin thực sự có dữ liệu trong đó?
slolife

2
Đây không phải là một tệp thưa thớt (theo như tôi biết) và tệp này trống.
Joey

1
Tôi bối rối ở đây ... nếu nó là tức thời và nó không phải là một tệp thưa thớt, vậy thì nó thực sự sử dụng hết dung lượng đĩa như thế nào?
Jason S

2
@JasonS: contigthực sự đi đến byte cuối cùng và viết một ký tự 0ở đó (chỉ cần nhìn với Process Monitor). Windows sau đó lấp đầy phần còn lại bằng số không. Điều này có thể hiệu quả như bạn có thể nhận được với các tệp không thưa thớt và việc tạo tệp có kích thước khoảng 5 GiB chỉ mất vài giây ngay cả trên đĩa cứng của tôi. Tôi đoán hồi đó tôi đã thử trên SSD hoặc với các tệp nhỏ hơn. Nhưng nó khá nhanh (và chắc chắn nhanh hơn là tự mình viết tất cả các byte của tệp trống.
Joey

23

Tôi đã tìm kiếm một cách để tạo ra các tệp lớn với dữ liệu, không chỉ là tệp thưa thớt. Đã qua các kỹ thuật dưới đây :

Nếu bạn muốn tạo một tệp có dữ liệu thực thì bạn có thể sử dụng tập lệnh dòng lệnh bên dưới.

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

(Chạy lần lượt hai lệnh trên hoặc bạn có thể thêm chúng vào tệp bó.)

Các lệnh trên tạo tệp dummy.txt 1 MB trong vài giây ...


6
Trích xuất từ ​​liên kết trên: Nếu bạn muốn tạo một tệp có dữ liệu thực thì bạn có thể sử dụng tập lệnh dòng lệnh bên dưới. 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 (Chạy lần lượt hai lệnh trên hoặc bạn có thể thêm chúng vào tệp bó.) Các lệnh trên tạo tệp dummy.txt 1 MB trong vòng vài giây.
Tony Stark

Chú ý: Bạn phải sao chép dòng đầu tiên trước, nhấn Enter và hơn là sao chép dòng thứ hai. Tôi đã cố gắng sao chép toàn bộ kịch bản vào vỏ của mình nhưng sau đó không có gì hạnh phúc.
Magiranu

15

Hãy xem RDFC http://www.bertel.de/software/rdfc/index-en.html

RDFC có thể không phải là nhanh nhất, nhưng nó phân bổ các khối dữ liệu. Nhanh nhất hoàn toàn sẽ phải sử dụng API cấp thấp hơn để có được chuỗi cụm và đưa chúng vào MFT mà không cần ghi dữ liệu.

Xin lưu ý rằng không có viên đạn bạc nào ở đây - nếu "sáng tạo" trả về ngay lập tức có nghĩa là bạn có một tệp thưa thớt chỉ tạo ra một tệp lớn, nhưng bạn sẽ không nhận được khối / chuỗi dữ liệu cho đến khi bạn ghi vào đó. Nếu bạn vừa đọc là bạn sẽ nhận được số không rất nhanh, điều đó có thể khiến bạn tin rằng ổ đĩa của bạn đột nhiên nhanh đến mức đáng kinh ngạc :-)


Đây dường như là câu trả lời tốt nhất. FSUTIL tạo một tệp thưa thớt không phải là kịch bản kiểm tra hợp lệ cho nhiều trường hợp. Sysiternals contig dường như không bao giờ hoạt động với tôi, khi tôi sử dụng một lệnh như "contig -n tinyefile.bin 6000000000, nó tạo ra một tệp có kích thước 1,7 GB ... ??? Cảm ơn RDFC vì nó đã hoạt động hoàn hảo trong lần thử và viết đầu tiên tốc độ ghi tối đa của đĩa ATA của tôi.
Syclone0044

Như đã nói ở trên, FSUTIL Đổi createnew KHÔNG tạo các tệp thưa thớt, nó chỉ phân bổ (trong MFT) không gian được yêu cầu cho tệp được yêu cầu, tức là toàn bộ không gian. Sau đó, nếu bạn kiểm tra các thuộc tính của tệp, kích thước được phân bổ (kích thước được đặt tên một cách khó chịu trên đĩa đĩa vì nó có thể nằm trên bất kỳ thiết bị nào không nhất thiết phải là đĩa đĩa cứng) tương tự hoặc rất gần với kích thước thực tế. Một tập tin thưa thớt thực sự chứa đầy số không sẽ có kích thước được phân bổ rất nhỏ. Công cụ duy nhất tôi tìm thấy có thể biến một tệp không thưa thớt thành một tệp thưa thớt (và thực sự giảm kích thước của nó, không chỉ đánh dấu nó) là SpzzyTest.
GabrielB

13

Kiểm tra các công cụ bộ tài nguyên Windows Server 2003 . Có một tiện ích gọi là Creatfil.

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

Nó tương tự như mkfile trên Solaris.


1
Tôi không muốn phải tải xuống bộ tài nguyên.
Leigh Riffel

bạn sẽ chỉ cần 1 exe từ bộ tài nguyên, bạn không cần phải có toàn bộ trên hệ thống sản xuất của mình.
Byron Whitlock

1
Tôi sẽ thử, nhưng tôi không muốn phụ thuộc vào tệp bổ sung.
Leigh Riffel

Bây giờ, tệp không tải xuống chính xác cho tôi, nhưng tôi không thể tưởng tượng được nó nhanh hơn công cụ Contig được đề cập bởi Johannes Rossel.
Leigh Riffel

1
Cảm ơn! Gói đã tải xuống là rktools.exe và nó là 11,7 MB và 18,2 MB khi được mở rộng. Ồ, và đó là "creatfil.exe" chứ không phải "createfil.exe". Chỉ riêng tệp này có kích thước 5,5 KB và đó là tất cả những gì bạn thực sự cần. Tôi mất chưa đến 1 phút để tạo tệp 1 GB trên cpu Intel lõi tứ 3.0 GHz. Với công cụ fsutil.exe như đã đăng ở trên, chỉ mất một phần giây để tạo ra nó. Vì vậy, sự thật là, công cụ đó tạo ra các tệp thưa thớt. Nó thậm chí còn lớn hơn, nó là 73,5 KB. Điều này là tốt hơn để tạo các tệp lớn cho mục đích thử nghiệm.
Samir

11

Tôi cần một tệp 10 GB thông thường để kiểm tra, vì vậy tôi không thể sử dụng fsutilvì nó tạo các tệp thưa thớt (cảm ơn @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

Tôi muốn tạo một tệp 10 GB, nhưng vì một số lý do, nó chỉ hiển thị là 4 GB, vì vậy tôi muốn được an toàn và dừng ở mức 4 GB. Nếu bạn thực sự muốn chắc chắn rằng tệp của bạn sẽ được hệ điều hành và các ứng dụng khác xử lý đúng cách, hãy ngừng mở rộng nó ở mức 1 GB.


Bạn cần sử dụng một ký tự phần trăm, không gấp đôi. Ngoài ra, bạn không cần thêm khoảng trắng trong ngoặc đơn. Tôi sẽ chỉnh sửa nó cho bạn.
Samir

Bạn đã sử dụng hệ điều hành nào ở đây? Đây rmlà lệnh Unix / Linux, trong khi đó dellà lệnh DOS / Windows? ...
Samir

Đây có phải là một tệp bó hay bạn có nghĩa vụ phải ban hành các lệnh này ngay lập tức trong cmd? Dấu một phần trăm được sử dụng trong cmd, như %inhưng trong một tệp bó bạn sử dụng dấu hai phần trăm, như thế nào %%i.
Samir

@Sammy: Nó bắt đầu bằng @echo off, nên rõ ràng là a .bat. Đó là lý do tại sao nó có dấu hiệu gấp đôi.
f.ardelian

Được rồi, sau đó chúng tôi có thể muốn mang lại dấu hai phần trăm. Tại sao bạn xóa file-4gb.txttrước khi bạn tạo nó? Điều đó sẽ không dẫn đến lỗi? Bạn đã thực sự có ý định tạo ra file-4gb.txttrên dòng đó? Hoặc đổi tên file-big.txttập tin cũ ? Điều này là không rõ ràng, ngay cả đối với một tệp bó. Nếu bạn có ý định đổi tên nó, thì lệnh bạn đang tìm kiếm có lẽ là ren. Thích ren file-big.txt file-4gb.txt. Tôi nghĩ rằng bạn nhầm lẫn với rm.
Samir

7

Mở Trình quản lý tác vụ Windows, tìm quy trình lớn nhất bạn đang chạy nhấp chuột phải và nhấp vào Create dump file.

Điều này sẽ tạo một tệp liên quan đến kích thước của quá trình trong bộ nhớ trong thư mục tạm thời của bạn.

Bạn có thể dễ dàng tạo một tệp có kích thước tính bằng gigabyte.

Nhập mô tả hình ảnh ở đây

Nhập mô tả hình ảnh ở đây


2
giải pháp tốt đẹp! Hữu ích nếu bạn có nhiều ứng dụng đang chạy, để có các kích cỡ khác nhau
Don Cheadle

6

Viết tắt một ứng dụng đầy đủ, chúng tôi, những người Python có thể đạt được các tệp có kích thước bất kỳ với bốn dòng, cùng một đoạn trên Windows và Linux ( os.stat()dòng này chỉ là một kiểm tra):

>>> 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
Cài đặt Python để giải quyết một vấn đề thực sự quá mức cần thiết. Tại sao không sử dụng thứ gì đó được tích hợp sẵn như Powershell hoặc C # - gist.github.com/nadams810/6539070 (bạn thậm chí không cần Visual Studio để biên dịch các ứng dụng C #).
Natalie Adams

1
.Net, C # và Powershell không nhất thiết phải đa nền tảng.
gimel

1
Chúng được tích hợp vào Windows, đó là những gì OP yêu cầu (giả sử hệ thống của bạn đã cập nhật đầy đủ).
Natalie Adams

@NirthieAdams Nhưng câu trả lời này khá hữu ích nếu bạn đã cài đặt Python để giải quyết các vấn đề khác. :)
criptych đứng cùng với Monica

6

PowerShell one-liner để tạo tệp vào C:\Tempđể lấp đầy đĩa C: chỉ còn lại 10 MB:

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

3
nó sẽ tạo tập tin với một số nội dung thực sự hoặc tập tin thưa thớt?
Samselvaprabu

6

Sử dụng:

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

intgì Điều này sẽ làm việc cho một tệp 5 GB? Đây có phải là giới hạn 2 hoặc 4 GB? Tham số thứ ba SetFilePointer()là 0 cho thấy nó sẽ không hoạt động đối với tệp 5 GB.
Peter Mortensen

4

Tôi đang tìm cách để tạo một tệp giả lớn với phân bổ không gian gần đây. Tất cả các giải pháp có vẻ lúng túng. Cuối cùng tôi mới bắt đầu DISKPARTtiện ích trong Windows (được nhúng từ Windows Vista):

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

Trong đó MAXIMUM là kích thước tệp kết quả, 20 GB tại đây.


Giải pháp tốt nhất cho đến nay.
Frank FYC

Không làm việc cho tôi. Không có tập tin được tạo ra không may. Tôi đã thử với tư nhân quản trị viên.
Magiranu

4

Tôi tìm thấy một tiện ích tuyệt vời có thể định cấu hình tại https://github.com/acch/genfiles .

Nó lấp đầy tệp mục tiêu với dữ liệu ngẫu nhiên, do đó không có vấn đề gì với các tệp thưa thớt và với mục đích của tôi (kiểm tra thuật toán nén), nó mang lại mức độ nhiễu trắng tốt.


Tiện ích này là một ứng dụng Java tệp duy nhất nên hoạt động trên mọi nền tảng với Java.
Paul

@MusikPolice - Liên kết đã chết
dcp

Lưu ý Thật không may, điều đó chắc chắn sẽ xảy ra sau sáu năm.
MusikPolice

3

Các tệp Temp nên được lưu trữ trong Thư mục Temp của Windows. Dựa trên câu trả lời từ Rod, bạn có thể sử dụng một lớp lót sau để tạo tệp tạm thời 5 GB trả về tên tệp

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

Giải trình:

  • [System.IO.Path]::GetTempFileName() tạo một tên tệp ngẫu nhiên có phần mở rộng ngẫu nhiên trong Thư mục tạm thời của Windows
  • Đường ống được sử dụng để chuyển tên cho [System.IO.File]::Create($_) tạo tệp
  • Tên tệp được đặt thành tệp vừa tạo .SetLength(5gb). Tôi hơi ngạc nhiên khi phát hiện ra rằng PowerShell hỗ trợ Chuyển đổi Byte , điều này thực sự hữu ích.
  • Xử lý tập tin cần phải được đóng lại .closeđể cho phép các ứng dụng khác truy cập vào nó
  • Với ;$_tên tệp được trả về và với | ? { $_ }nó được đảm bảo rằng chỉ có tên tệp được trả về và không phải là chuỗi rỗng được trả về bởi[System.IO.File]::Create($_)

3

Cách đơn giản nhất mà tôi tìm thấy là tiện ích miễn phí này: http://www.mynikko.com/dummy/

Tạo các tệp giả có kích thước tùy ý chứa đầy khoảng trắng hoặc chứa đầy nội dung không nén được (lựa chọn của bạn). Đây là một ảnh chụp màn hình:

nhập mô tả hình ảnh ở đây


3

Plain ol 'C ... cái này được xây dựng theo MinGW GCC trên Windows XX và sẽ hoạt động trên mọi nền tảng C' chung '.

Nó tạo ra một tập tin null có kích thước xác định. Tệp kết quả KHÔNG chỉ là mục nhập chiếm không gian thư mục và trên thực tế chiếm số byte được chỉ định. Điều này là nhanh vì không có ghi thực tế xảy ra ngoại trừ byte được viết trước khi đóng.

Ví dụ của tôi tạo ra một tệp chứa đầy số không - điều này có thể thay đổi theo nền tảng; chương trình này về cơ bản thiết lập cấu trúc thư mục cho bất kỳ dữ liệu nào được treo xung quanh.

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

Tôi đề nghị bạn kiểm tra cách tôi định dạng mã của bạn. Và BTW. câu hỏi đã có câu trả lời rất hay và fseek + fwrite đã được trình bày trong Pyton và WinAPI, vì vậy đây là một sự trợ giúp nhỏ. Thật tuyệt khi bạn đã cung cấp một ví dụ hoàn chỉnh. +1 cho điều đó. Nhưng hãy cố gắng không trả lời lại các câu hỏi đã được giải quyết, thật lãng phí thời gian mà bạn có thể giúp ai đó nhiều hơn một chút :)
quetzalcoatl

2

Tôi đã tìm thấy một giải pháp bằng cách sử dụng DEBUG tại http://www.scribed.com/doc/445750/Create-a-Huge-File , nhưng tôi không biết một cách dễ dàng để viết kịch bản và dường như không thể để tạo các tệp lớn hơn 1 GB.


1
bạn không thể tạo 5 tập tin và sau đó nối chúng? Tạo chúng một cách đồng thời bằng cách sử dụng luồng, và sau đó nối chúng: D
dassouki

Tôi không biết nếu tôi có thể xâu chuỗi nó mà không cần lập trình, nhưng vâng, tôi có thể sao chép tệp một vài lần để có được kích thước tôi cần. Trong trường hợp của tôi, tôi không cần tệp đó là 5 GB, chỉ cần dung lượng sử dụng hết.
Leigh Riffel

2
Viết vào nhiều tệp bằng cách sử dụng luồng nghe có vẻ là một ý tưởng tồi tệ, do các ổ cứng chậm như thế nào ... Ngoài ra, việc thêm chúng vào khá tốn kém về mặt thời gian nên có thể không đạt tiêu chí "nhanh".
Joey


2

Bạn có thể sử dụng lệnh powershell mèo.

Đầu tiên tạo một tệp văn bản đơn giản với một vài ký tự. Bạn càng nhập nhiều ký tự ban đầu, nó càng trở nên lớn hơn. Hãy gọi nó là out.txt. Sau đó, trong Powershell:

cat out.txt >> out.txt

Đợi miễn là cần thiết để làm cho tệp đủ lớn. Sau đó nhấn ctrl-c để kết thúc nó.


1

Bạn có thể thử mã C ++ này:

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

Có thể sẽ mất một chút thời gian để tạo tùy thuộc vào tốc độ CPU của bạn ...


Người đăng nhanh hỏi. Điều này sẽ yêu cầu cài đặt trình biên dịch C ++.

1

Câu trả lời đơn giản trong Python: Nếu bạn cần tạo một tệp văn bản thực lớn, tôi chỉ cần sử dụng một whilevòng lặp đơn giản và có thể tạo tệp 5 GB trong khoảng 20 giây. Tôi biết nó thô, nhưng nó đủ nhanh.

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

Nhanh để thực hiện hoặc nhanh chóng để gõ trên bàn phím? Nếu bạn sử dụng Python trên Windows, bạn có thể thử điều này:

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

0

Một giải pháp GUI khác: WinHex.

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

Trái với một số giải pháp đã được đề xuất, nó thực sự ghi dữ liệu (trống) trên thiết bị.

Nó cũng cho phép điền vào tệp mới với một mẫu có thể chọn hoặc dữ liệu ngẫu nhiên:

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

-1

Tôi đã thực hiện một số bổ sung cho cùng một fsutilphương pháp như được đề cập trong câu trả lời đã chọn. Điều này là để tạo các tệp có nhiều phần mở rộng khác nhau và / hoặc có kích cỡ khác nhau.

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

Mã này có thể được sao chép từ https://github.com/iamakidilam/bulkFileC [.git

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.