MSDN не очищен на 100%, но Джон Скит говорит «Флеш», так что сделайте это, прежде чем закрыть / утилизировать.Это не повредит, верно?
С Метод FileStream.Close :
Все данные, ранее записанные в буфер, копируютсяк файлу до закрытия файлового потока, поэтому нет необходимости вызывать Flush перед вызовом Close.После вызова Close любые операции с файловым потоком могут вызывать исключения.После того, как Close был вызван один раз, он ничего не делает, если вызывается снова.
Утилизация не так ясна:
Этот метод удаляет поток, записывая любые изменения всохранение хранилища и закрытие потока для освобождения ресурсов.
Примечание: комментаторы могут быть правы, это не на 100% ясно из Flush:
Переопределить Flush для потоков, которыереализовать буфер.Используйте этот метод для перемещения любой информации из нижележащего буфера в его место назначения, очистки буфера или того и другого.В зависимости от состояния объекта вам может потребоваться изменить текущую позицию в потоке (например, если базовый поток поддерживает поиск).Для получения дополнительной информации см. CanSeek.
При использовании класса StreamWriter или BinaryWriter не очищайте базовый объект Stream.Вместо этого используйте метод класса Flush или Close, который гарантирует, что данные сначала сбрасываются в базовый поток, а затем записываются в файл.
ИСПЫТАНИЯ:
var textBytes = Encoding.ASCII.GetBytes("Test123");
using (var fileTest = System.IO.File.Open(@"c:\temp\fileNoCloseNoFlush.txt", FileMode.CreateNew))
{
fileTest.Write(textBytes,0,textBytes.Length);
}
using (var fileTest = System.IO.File.Open(@"c:\temp\fileCloseNoFlush.txt", FileMode.CreateNew))
{
fileTest.Write(textBytes, 0, textBytes.Length);
fileTest.Close();
}
using (var fileTest = System.IO.File.Open(@"c:\temp\fileFlushNoClose.txt", FileMode.CreateNew))
{
fileTest.Write(textBytes, 0, textBytes.Length);
fileTest.Flush();
}
using (var fileTest = System.IO.File.Open(@"c:\temp\fileCloseAndFlush.txt", FileMode.CreateNew))
{
fileTest.Write(textBytes, 0, textBytes.Length);
fileTest.Flush();
fileTest.Close();
}
Что я могу сказать ... все файлы получили текст - может быть, это просто слишком мало данных?
Test2
var rnd = new Random();
var size = 1024*1024*10;
var randomBytes = new byte[size];
rnd.NextBytes(randomBytes);
using (var fileTest = System.IO.File.Open(@"c:\temp\fileNoCloseNoFlush.bin", FileMode.CreateNew))
{
fileTest.Write(randomBytes, 0, randomBytes.Length);
}
using (var fileTest = System.IO.File.Open(@"c:\temp\fileCloseNoFlush.bin", FileMode.CreateNew))
{
fileTest.Write(randomBytes, 0, randomBytes.Length);
fileTest.Close();
}
using (var fileTest = System.IO.File.Open(@"c:\temp\fileFlushNoClose.bin", FileMode.CreateNew))
{
fileTest.Write(randomBytes, 0, randomBytes.Length);
fileTest.Flush();
}
using (var fileTest = System.IO.File.Open(@"c:\temp\fileCloseAndFlush.bin", FileMode.CreateNew))
{
fileTest.Write(randomBytes, 0, randomBytes.Length);
fileTest.Flush();
fileTest.Close();
}
И снова - каждый файл получил свои байты ... для меняпохоже, он делает то, что я читаю из MSDN: не имеет значения, звоните ли вы Flush или Close, прежде чем утилизировать ... какие-либо мысли по этому поводу?