2010-09-22 6 views
10

में एक स्ट्रीमस्ट्रीम में स्ट्रीम को कनवर्ट करें C# का उपयोग करके स्ट्रीम को फ़ाइलस्ट्रीम में कनवर्ट करने का सबसे अच्छा तरीका क्या है।सी #

जिस फ़ंक्शन पर मैं काम कर रहा हूं, उसमें स्ट्रीम किया गया है जिसमें अपलोड किया गया डेटा है, और मुझे स्ट्रीम करने में सक्षम होना चाहिए। पढ़ें(), stream.Seek() विधियां जो फ़ाइलस्ट्रीम प्रकार के तरीके हैं।

एक साधारण कलाकार काम नहीं करता है, इसलिए मैं यहां मदद के लिए पूछ रहा हूं।

+0

काम कास्टिंग क्यों नहीं करता है? तब आपके आने वाले स्ट्रीम ऑब्जेक्ट का प्रकार क्या है? –

+2

यह बेतुका ऑपरेशन है। अगर स्ट्रीम 'रीड/सीक' का समर्थन नहीं करती है - तो कास्टिंग मदद नहीं करेगा। – zerkms

उत्तर

18

Read और SeekStream प्रकार पर विधियां हैं, न केवल FileStream। यह सिर्फ इतना है कि हर धारा उन्हें समर्थन नहीं देती है। (व्यक्तिगत तौर पर मैं Seek बुला से अधिक Position property का उपयोग कर पसंद करते हैं, लेकिन वे एक ही बात करने के लिए नीचे उबाल।)

आप एक फ़ाइल में डंपिंग से अधिक मेमोरी में डेटा को होने पसंद करेंगे, तो क्यों सिर्फ यह सब एक MemoryStream में पढ़ा नहीं ? वह मांग का समर्थन करता है। उदाहरण के लिए:

public static MemoryStream CopyToMemory(Stream input) 
{ 
    // It won't matter if we throw an exception during this method; 
    // we don't *really* need to dispose of the MemoryStream, and the 
    // caller should dispose of the input stream 
    MemoryStream ret = new MemoryStream(); 

    byte[] buffer = new byte[8192]; 
    int bytesRead; 
    while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0) 
    { 
     ret.Write(buffer, 0, bytesRead); 
    } 
    // Rewind ready for reading (typical scenario) 
    ret.Position = 0; 
    return ret; 
} 

उपयोग:

using (Stream input = ...) 
{ 
    using (Stream memory = CopyToMemory(input)) 
    { 
     // Seek around in memory to your heart's content 
    } 
} 

यह Stream.CopyTo विधि नेट 4.

में पेश आप वास्तव में फ़ाइल सिस्टम में लिखने के लिए चाहते हैं का उपयोग कर के समान है, आप कुछ ऐसा ही कर सकते हैं जो फ़ाइल को पहले लिखता है, फिर स्ट्रीम को रिवाइंड करता है ... लेकिन फिर आपको फाइलों के साथ अपनी डिस्क को कूड़े से बचने के लिए इसे बाद में हटाने का ख्याल रखना होगा।