StreamWriter не записывает текст в файл - PullRequest
0 голосов
/ 13 апреля 2020

Я написал некоторый код, который должен записать в файл некоторый текст:

        private static FileStream CreateFile()
        {
            string _fileName = "znaki.txt";

            if(File.Exists(_fileName))
            {
                File.Delete(_fileName);
            }

            FileStream fs = new FileStream(_fileName, FileMode.Create, FileAccess.Write);

            Console.Clear();
            Console.Write("Ile znakok chcesz wygenerowac? >> ");
            int lp;
            lp = Convert.ToInt32(Console.ReadLine());

            Random r = new Random();
            StreamWriter sw = new StreamWriter(fs);
            for (int i = 0; i < lp; i++)
            {
                Console.Clear();
                Console.WriteLine(i + "/" + lp);

                sw.WriteLine("jogurcik");
            }

            return fs;
        }

Этот код создает файл, но ничего не пишет. Что не так с этим кодом?

1 Ответ

2 голосов
/ 13 апреля 2020

Закрыть StreamWriter (а также FileStream) в конце процедуры записи:

sw.Close();
fs.Close();

MSDN :

Вы должны вызвать Close убедитесь, что все данные правильно записаны в основной поток ... Очистка потока не приведет к гриппу sh его базовому кодировщику, если вы явно не вызовите Flu sh или Close.

PS Альтернативный способ должен использовать оператор using, который помогает автоматически закрывать и удалять объекты ввода-вывода:

using (FileStream fs = new FileStream(_fileName, FileMode.Create, FileAccess.Write))
{
    ...
    using (StreamWriter sw = new StreamWriter(fs)) 
    { 
        for (int i = 0; i < lp; i++)
        {
            ...
            sw.WriteLine("jogurcik");
        }
    }
}

В этом случае вы можете пропустить вызов close.

...