मैं एक स्ट्रीम खोलता हूं और फिर स्ट्रीम में डेटा को deserialize। हालांकि, मैंने सहेजे गए EventSet ऑब्जेक्ट में एक सदस्य जोड़ा है, इसलिए जब मैं पुरानी फ़ाइल खोलने का प्रयास करता हूं, तो यह deserialization लाइन पर अपवाद फेंकता है।अपवाद के बाद एक स्ट्रीम बंद करना
यह मेरे साथ ठीक है (अभी के लिए) लेकिन समस्या यह है कि मैं अपवाद को संभालता हूं, लेकिन स्ट्रीम को कभी बंद नहीं करता (क्योंकि स्ट्रीम को बंद करने से पहले अपवाद हुआ), इसलिए जब मैं फ़ाइल को फिर से खोलने का प्रयास करता हूं, यह मुझे नहीं जाने देगा क्योंकि यह उपयोग में है।
इस अपवाद के बाद मैं स्ट्रीम को कैसे बंद करूं? अगर मैं स्ट्रीम डालता हूं। अंत में या तो अंत में बंद करें(), यह एक असाइन किए गए स्थानीय चर का उपयोग करने की कोशिश करने के बारे में शिकायत करता है। मुझे लगता है कि एक यादृच्छिक फ़ाइल खोलने के लिए बुरी आदत की तरह लगता है। क्या एक स्ट्रीम को एक ऐसे तरीके से खोलने का कोई तरीका है जो खाली कन्स्ट्रक्टर के समान होगा, ऐसा लगता है कि यह असाइन किया गया है?
धन्यवाद अशक्त करने के लिए
SavedEventSet sES;
OpenFileDialog oFD = new OpenFileDialog();
Stream stream;
BinaryFormatter bF;
try
{
oFD.InitialDirectory = this.path;
oFD.Title = "Open Event Saved File.";
oFD.ShowDialog();
if(oFD.FileName.Contains(".sav"))
{
stream = File.Open(oFD.FileName, FileMode.Open);
bF = new BinaryFormatter();
sES = (SavedEventSet)bF.Deserialize(stream);
stream.Close();
}
}
catch (Exception ex)
{
stream.Close();
/*handle Exception*/
}
+1। उन दृश्यों के पीछे जो इसे एक कोशिश/पकड़ ब्लॉक में संकलित करते हैं, और गारंटी 'डिस्प्ले()' कहा जाता है - इसका उपयोग 'आईडीस्पोजेबल ' – STW
के सभी कार्यान्वयनकर्ताओं पर किया जा सकता है, मैं सहमत हूं, यह वही है जो' उपयोग 'ब्लॉक के लिए है । – auujay
धन्यवाद :) मुझे उपयोग ब्लॉक के बारे में भी पता नहीं था। – EatATaco