2011-09-19 19 views
7

मैं लूप में लोड होने वाली फ़ाइल के प्रतिशत की गणना कैसे करूं?प्रगति प्रतिशत की गणना

उदाहरण के लिए:

ProcessStartInfo p = new ProcessStartInfo(); 
Process process = Process.Start(p); 
StreamReader sr = process.StandardOutput; 
char[] buf = new char[256]; 
string line = string.Empty; 
int count; 

while ((count = sr.Read(buf, 0, 256)) > 0) 
{ 
    line += new String(buf, 0, count); 
    progressBar.Value = ??? 
} 

`

मैं यह करने के लिए कैसे? अग्रिम धन्यवाद

+0

क्षमा करें, प्रारूप बॉक्स, यहां प्रदर्शित नहीं होता है। – Kakashi

+0

फिक्स्ड सिंटैक्स स्वरूपण। आप कोड दर्ज करने के लिए {} आइकन का उपयोग कर सकते हैं, और यदि यह सही काम नहीं करता है, तो आप कोड से पहले जोड़ सकते हैं। :) – aevanko

+0

यह आपके लिए तय किया गया है। – Ikke

उत्तर

11

आपको उम्मीद की जाने वाली आउटपुट की अंतिम मात्रा जानने की आवश्यकता होगी - अन्यथा आपके पास आउटपुट का अनुपात देने का कोई तरीका नहीं है जो पहले ही पूरा हो चुका है।

आप जानते हैं कि यह एक निश्चित आकार होने जा रहा है, तो आप उपयोग कर सकते हैं:

// *Don't* use string concatenation in a loop 
StringBuilder builder = new StringBuilder(); 
int count; 
while ((count = sr.Read(buf, 0, 256)) > 0) 
{ 
    builder.Append(buf, 0, count); 
    progressBar.Value = (100 * builder.Length)/totalSize; 
} 

यह शून्य की एक न्यूनतम और 100 की एक अधिकतम के साथ एक प्रगति बार मान लिया गया है - यह भी मानता है कि कुल लंबाई है int.MaxValue/100 से कम। एक अन्य दृष्टिकोण केवल प्रगति पट्टी को अधिकतम लंबाई को अधिकतम मूल्य बनाने के लिए है, और प्रगति बार मान को builder.Length पर सेट करें।

आपको अभी भी शुरू होने से पहले समग्र लंबाई जानने की आवश्यकता होगी, अन्यथा आप संभवतः अनुपात के रूप में प्रगति नहीं कर सकते हैं।

+0

+1 आपके उत्तर के लिए धन्यवाद, मेरे लिए भी सहायक था। लेकिन लूप में स्ट्रिंग कॉन्सटेनेशन का उपयोग क्यों नहीं करते? –

+1

@ द मास्क: देखें http://www.yoda.arachsys.com/csharp/stringbuilder.html –

संबंधित मुद्दे