Read
और Seek
Stream
प्रकार पर विधियां हैं, न केवल 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.
में पेश आप वास्तव में फ़ाइल सिस्टम में लिखने के लिए चाहते हैं का उपयोग कर के समान है, आप कुछ ऐसा ही कर सकते हैं जो फ़ाइल को पहले लिखता है, फिर स्ट्रीम को रिवाइंड करता है ... लेकिन फिर आपको फाइलों के साथ अपनी डिस्क को कूड़े से बचने के लिए इसे बाद में हटाने का ख्याल रखना होगा।
स्रोत
2010-09-22 12:17:49
काम कास्टिंग क्यों नहीं करता है? तब आपके आने वाले स्ट्रीम ऑब्जेक्ट का प्रकार क्या है? –
यह बेतुका ऑपरेशन है। अगर स्ट्रीम 'रीड/सीक' का समर्थन नहीं करती है - तो कास्टिंग मदद नहीं करेगा। – zerkms