Tôi mở một luồng và sau đó deserialize dữ liệu trong luồng. Tuy nhiên, tôi đã thêm một thành viên vào đối tượng SavedEventSet vì vậy bây giờ khi tôi cố mở một tệp cũ, nó ném ngoại lệ trên dòng deserialization.Đóng một luồng sau một ngoại lệ
Điều này là tốt với tôi (hiện tại) nhưng vấn đề là tôi xử lý ngoại lệ, nhưng không bao giờ đóng luồng (vì ngoại lệ xảy ra trước khi tôi đóng luồng), vì vậy khi tôi cố mở lại tệp, nó sẽ không cho tôi bởi vì nó đang được sử dụng.
Làm cách nào để đóng luồng sau ngoại lệ này? Nếu tôi đặt stream.Close() trong một trong hai catch hoặc cuối cùng, nó phàn nàn về việc cố gắng truy cập một biến cục bộ chưa được gán. Có vẻ như thực tế xấu để chỉ cần mở một tập tin ngẫu nhiên tôi biết là có. Có cách nào để mở một luồng theo cách tương tự như một hàm tạo rỗng không, vì vậy nó sẽ trông giống như nó được gán?
Cảm ơn
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 cho 'using()'. Đằng sau hậu trường nó biên dịch xuống một khối try/catch, và đảm bảo 'Dispose()' được gọi - nó có thể được sử dụng trên tất cả những người thực thi 'IDisposable' – STW
Tôi đồng ý, đây chính xác là những gì mà 'sử dụng' . – auujay
Cảm ơn :) Tôi thậm chí không biết về khối sử dụng. – EatATaco