Làm thế nào để tạo chuỗi có độ dài nhất định để chèn vào tệp đáp ứng tiêu chí kích thước tệp?


114

Tôi có yêu cầu kiểm tra một số vấn đề tải liên quan đến kích thước tệp. Tôi có một ứng dụng windows được viết bằng C # sẽ tự động tạo các tệp. Tôi biết kích thước của mỗi tệp, ví dụ: 100KB và số lượng tệp cần tạo. Điều tôi cần trợ giúp là cách tạo một chuỗi nhỏ hơn hoặc bằng kích thước tệp được yêu cầu.

mã giả:

long fileSizeInKB = (1024 * 100); //100KB
int numberOfFiles = 5;

for(var i = 0; i < numberOfFiles - 1; i++) {
     var dataSize = fileSizeInKB;
     var buffer = new byte[dataSize];
     using (var fs = new FileStream(File, FileMode.Create, FileAccess.Write)) {

     }
}

1
Tại sao bạn cần tạo một chuỗi? Chỉ cần ghi bộ đệm của bạn.
Lazarus

Giả sử, tôi muốn mở rộng nó để tạo tệp văn bản Lorem Ipsum thay vì chỉ "fs.Write (buffer, 0, (int) fileSizeInKB)".
VajNyiaj

Câu trả lời:


345

Bạn luôn có thể sử dụng một hàm tạo cho chuỗi mất một charvà một số lần bạn muốn ký tự đó được lặp lại:

string myString = new string('*', 5000);

Điều này mang lại cho bạn một chuỗi 5000 sao - điều chỉnh theo nhu cầu của bạn.


83
+1 Tổ tiên của chúng ta đã làm gì trước Stack Overflow? Thật đơn giản, thật ngọt ngào.
Dan Solovay,

6
Stack overflow là nghĩa đen top mười thành tựu công nghệ của mọi thời đại :-D như thế nào ai địa ngục học để mã một cách hiệu quả mà không có nó, chúng tôi sẽ không bao giờ biết
Bến Akin

2
Tôi đã ở đó, vào thời xa xưa và tôi vẫn chưa cảm thấy mình là tổ tiên: D Cách duy nhất để tìm thấy những viên ngọc trai đó là tìm kiếm thông qua mã của bạn và / hoặc mã của đội bạn và tích lũy những điều tốt đẹp theo thời gian. Bây giờ chúng tôi có thể chia sẻ ngọc trai với mọi người :)
Andrzej Martyna

13

Cách dễ nhất là mã sau:

var content = new string('A', fileSizeInKB);

Bây giờ bạn đã có một chuỗi với nhiều A theo yêu cầu.

Để lấp đầy nó bằng Lorem Ipsum hoặc một số chuỗi lặp lại khác, hãy xây dựng một cái gì đó giống như mã giả sau:

string contentString = "Lorem Ipsum...";
for (int i = 0; i < fileSizeInKB / contentString.Length; i++)
  //write contentString to file

if (fileSizeInKB % contentString.Length > 0)
  // write remaining substring of contentString to file

Chỉnh sửa: Nếu bạn đang lưu bằng Unicode, bạn có thể cần một nửa số lượng kích thước tệp vì unicode sử dụng hai byte cho mỗi ký tự nếu tôi nhớ không nhầm.


4
fileSizeInKB nên là fileSizeInBytes .. hay fileSizeInBytes / 2 nếu bạn đang xuất unicode?
James Gaunt

1
Có, tôi đã sử dụng tên biến của mẫu, giá trị được gán là byte nên tên sai hoặc giá trị được gán.
Florian von Spiczak

2

Có rất nhiều biến thể về cách bạn có thể làm điều này. Một là, điền vào tệp với một loạt các ký tự. Bạn cần 100KB? Không sao .. 100 * 1024 * 8 = 819200 bit. Một ký tự đơn là 16 bit. 819200/16 = 51200. Bạn cần gắn 51.200 ký tự vào một tệp. Nhưng hãy lưu ý rằng một tệp có thể có thêm dữ liệu tiêu đề / meta, vì vậy bạn có thể cần tính đến điều đó và giảm số lượng ký tự để ghi vào tệp.


0

Như một phần câu trả lời cho câu hỏi của bạn, gần đây, tôi đã tạo một ứng dụng WPF di động có thể dễ dàng tạo các tệp 'rác' ở hầu hết mọi kích thước: https://github.com/webmooch/FileCreator

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.