फ़ाइल आकार मानदंड को पूरा करने के लिए फ़ाइल में सम्मिलित करने के लिए एक निश्चित लंबाई की स्ट्रिंग कैसे उत्पन्न करें?


114

मुझे फ़ाइल आकार के संबंध में कुछ लोड मुद्दों का परीक्षण करने की आवश्यकता है। मेरे पास C # में लिखा हुआ एक विंडोज़ एप्लीकेशन है जो स्वचालित रूप से फाइल जेनरेट करेगा। मुझे पता है कि प्रत्येक फ़ाइल का आकार, पूर्व। 100KB, और कितनी फाइलें जनरेट करनी हैं। आवश्यक फ़ाइल आकार से कम या बराबर स्ट्रिंग उत्पन्न करने के लिए मुझे किस चीज़ की सहायता चाहिए।

छद्म कोड:

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
आपको एक स्ट्रिंग बनाने की आवश्यकता क्यों है? बस अपना बफर लिखो।
लाजर

मान लीजिए, मैं इसे केवल "fs.Write (बफर, 0, (int) fileSizeInKB)" के बजाय लोरम इप्सम टेक्स्ट फ़ाइलों को उत्पन्न करने के लिए विस्तारित करना चाहता हूं।
वजनीज

जवाबों:


346

आप हमेशा स्ट्रिंग के लिए एक कंस्ट्रक्टर का उपयोग कर सकते हैं जो charबार-बार लगता है कि आप उस चरित्र को दोहराना चाहते हैं:

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

यह आपको 5000 सितारों की एक स्ट्रिंग देता है - अपनी आवश्यकताओं के लिए ट्वीक।


83
+1 स्टैक ओवरफ्लो से पहले हमारे पूर्वजों ने क्या किया था? इतना सरल, इतना मीठा।
दान सोलोवै

6
स्टैक ओवरफ्लो का शाब्दिक रूप से शीर्ष दस प्रौद्योगिकी उपलब्धियां हैं: -D कैसे नरक कोई भी इसके बिना कुशलतापूर्वक कोड करना सीखता है, हम कभी नहीं जान पाएंगे
बेन अकिन

2
मैं वहां था, इन प्राचीन समयों में और मुझे अभी तक पूर्वज की तरह महसूस नहीं हुआ है: डी इस तरह के मोती खोजने का एकमात्र तरीका था कि आप अपनी टीम के कोड और / या कोड के माध्यम से खोज करें और समय के साथ अच्छी चीजों को जमा करें। अब हम सभी के साथ मोती साझा कर सकते हैं :)
आंद्रेजेज मार्टिना 19

13

सबसे आसान तरीका निम्नलिखित कोड होगा:

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

अब आपको आवश्यक के रूप में कई ए के साथ एक स्ट्रिंग मिल गई है।

लोरम इप्सम या कुछ अन्य दोहराए जाने वाले स्ट्रिंग के साथ इसे भरने के लिए निम्नलिखित स्यूडकोड जैसा कुछ बनाएं:

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

संपादित करें: यदि आप यूनिकोड में बचत कर रहे हैं तो आपको आधी फाइलों की गिनती करने की आवश्यकता हो सकती है क्योंकि यदि मुझे सही याद है तो यूनिकोड प्रति वर्ण दो बाइट्स का उपयोग करता है।


4
अगर आप यूनीकोड ​​का उत्पादन कर रहे हैं, तो fileSizeInKB को fileSizeInBytes .. या fileSizeInBytes / 2 होना चाहिए?
जेम्स गौंट

1
हां, मैंने नमूने के चर नाम का उपयोग किया है, असाइन किया गया मान बाइट्स है इसलिए या तो नाम गलत है या असाइन किया गया मान है।
फ्लोरियन वॉन स्पिकज़ाक

2

आप इसे कैसे कर सकते हैं, इस पर बहुत सारी विविधताएं हैं। एक होगा, फ़ाइल को वर्णों के एक समूह के साथ भरें। आपको 100KB की आवश्यकता है? कोई बात नहीं .. 100 * 1024 * 8 = 819200 बिट्स। एक एकल चर 16 बिट्स है। 819200/16 = 51200. आपको एक फ़ाइल में 51,200 चार्ट चिपकाए जाने की आवश्यकता है। लेकिन विचार करें कि किसी फ़ाइल में अतिरिक्त हेडर / मेटा डेटा हो सकता है, इसलिए आपको फ़ाइल लिखने के लिए चार्ट की संख्या कम करनी होगी।


0

आपके प्रश्न के आंशिक उत्तर के रूप में मैंने हाल ही में एक पोर्टेबल WPF ऐप बनाया है जो आसानी से लगभग किसी भी आकार की 'जंक' फाइलें बनाता है: https://github.com/webmooch/FileCreator

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.