Я знаю, что это может показаться глупым, но почему следующий код работает, только если я закрыл() файл? Если я не закрываю файл, весь поток не записывается.Зачем мне закрывать() файл на C#?
Шаги:
- Выполнить этот код на форму нагрузки.
- Закрыть форму, используя мышь, как только она будет отображаться.
- Программа завершается.
Не должен ли файл-объект быть красным или закрытым автоматически, когда он выходит из сферы видимости? Я новичок в C#, но я привык добавлять вызовы в Close() в деструкторах C++.
// Notes: complete output is about 87KB. Without Close(), it's missing about 2KB at the end.
// Convert to png and then convert that into a base64 encoded string.
string b64img = ImageToBase64(img, ImageFormat.Png);
// Save the base64 image to a text file for more testing and external validation.
StreamWriter outfile = new StreamWriter("../../file.txt");
outfile.Write(b64img);
// If we don't close the file, windows will not write it all to disk. No idea why
// that would be.
outfile.Close();
Вы можете найти обсуждение на http://blogs.msdn.com/b/oldnewthing/archive/ 2010/08/10/10048150.aspx, чтобы помочь объяснить и обосновать различия между C# и C++. В общем, я бы сравнил деструкторы C++ с C# 'IDisposable' и' using {} '. И, конечно, 'использование' безопаснее, чем вызов' Close' или 'Dispose' явно, поскольку он завершает вызов в блоке' try-finally', чтобы гарантировать, что объект удален. – Brian
Спасибо, все, за ясную и быструю помощь. – Harvey