Данный код выполняет запись в файл (выполняется в Windows 10):
class Program
{
static void Main(string[] args)
{
StreamWriter sw = new StreamWriter(@"D:\Documents\JS\1.txt");
for (int i = 0; i<=100000;i++)
{
sw.WriteLine(i.ToString());
}
Console.ReadKey();
}
}
Однако в конце файла я обнаруживаю:
99882
99883
99884
99885
99886
99887
99888
99889
99890
9
Если после цикла использую
sw.Close();
то всё нормально. На работе на ПК с Windows 7 он дописывает до конца.
Почему так происходит?
StreamWriter и прочие средства для записи в файл, как правило, используют буфер в памяти, чтобы писать в файл блоками.
Для очистки буфера (и записи данных из него в файл) используется метод .Flush(). Метод .Close() также приводит к очистке буфера, хоть это и не основное его назначение.
То что на каком-то устройстве у вас дописывалось до конца - это, что называется, "повезло".
Вы не закрыли StreamWriter.
Используйте using:
using (StreamWriter sw = new StreamWriter(@"D:\Documents\JS\1.txt"))
{
for (int i = 0; i<=100000;i++)
{
sw.WriteLine(i.ToString());
}
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей