StreamWriter не записывает последовательность чисел в файл - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Нужно сгенерировать заданное количество файлов с выбранного типа последовательностью чисел (записанных через пробел) заданной длины. Есть тип последовательности "С заданными числами", которая по задумке формирует последовательность из введённых чисел (если их количество меньше, чем длина последовательности, то они повторяются с начала, и так до конца, как-то так). И вот на этом типе не работает. Файл создаётся, но остаётся пустым. Так как работа сама большая, оставлю только часть кода. Объясните, пожалуйста, в чём ошибка
                case "С заданными элементами":
                    {
                        progressBar1.Maximum = numSeq; //numSeq - количество последовательностей (файлов)
                        progressBar1.Value = 0;
                        int[] el; //массив заданных чисел
                        string str = Convert.ToString(textBox4.Text); //берём строку из окошка для заданных элементов
                        try
                        {
                            el = Array.ConvertAll(str.Split(' '), Convert.ToInt32); //формируем массив заданных чисел, если получится
                            int k = 0;
                            for (int i = 1; i <= numSeq; i++)
                            {
                                StreamWriter stream = new StreamWriter(numEl + "_" + i + ".own");
                                for (int j = 0; j < numEl; j++) //numEl - количество элементов
                                {
                                    if (k >= el.Length)
                                    {
                                        k = 0;
                                    }
                                    stream.Write((el[k]) + " "); //запись числа с пробелом после
                                    k++;
                                }
                                numEl += step; //step - шаг изменения кол-ва элементов в последовательностях, если их несколько
                                progressBar1.Value++;
                            }
                            MessageBox.Show("Генерация завершена!", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            progressBar1.Value = 0; 
                            //очистка всех окошек
                            comboBox1.SelectedIndex = -1;
                            textBox1.Clear();
                            textBox2.Clear();
                            textBox3.Clear();
                            textBox4.Clear();
                            //задать элементы снова становится невозможным
                            label5.Enabled = false;
                            textBox4.Enabled = false;
                        }
                        catch
                        {
                            MessageBox.Show("Недопустимые символы ввода в строку для заданных элементов!" + "\n" + "Введите числа через пробел.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            return;
                        }
                    }
                    break;
Подождите. Я не закрываю StreamWriter. Теперь так:
 case "С заданными элементами":
                    {
                        progressBar1.Maximum = numSeq; //numSeq - количество последовательностей (файлов)
                        progressBar1.Value = 0;
                        int[] el; //массив заданных чисел
                        string str = Convert.ToString(textBox4.Text); //берём строку из окошка для заданных элементов
                        try
                        {
                            el = Array.ConvertAll(str.Split(' '), Convert.ToInt32); //формируем массив заданных чисел, если получится
                            int k = 0;
                            for (int i = 1; i <= numSeq; i++)
                            {
                                StreamWriter stream = new StreamWriter(numEl + "_" + i + ".own");
                                for (int j = 0; j < numEl; j++) //numEl - количество элементов
                                {
                                    if (k >= el.Length)
                                    {
                                        k = 0;
                                    }
                                    stream.Write((el[k]) + " "); //запись числа с пробелом после
                                    k++;
                                }
                                stream.Close();
                                numEl += step; //step - шаг изменения кол-ва элементов в последовательностях, если их несколько
                                progressBar1.Value++;
                            }
                            MessageBox.Show("Генерация завершена!", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            progressBar1.Value = 0; 
                            //очистка всех окошек
                            comboBox1.SelectedIndex = -1;
                            textBox1.Clear();
                            textBox2.Clear();
                            textBox3.Clear();
                            textBox4.Clear();
                            //задать элементы снова становится невозможным
                            label5.Enabled = false;
                            textBox4.Enabled = false;
                        }
                        catch
                        {
                            MessageBox.Show("Недопустимые символы ввода в строку для заданных элементов!" + "\n" + "Введите числа через пробел.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            return;
                        }
                    }
                    break;
Но проблема остаётся, пусть и другого рода. Теперь в файл записываются непонятные символы: ‱′″‱′″‱′″‱′″‱... и так до конца файла. Странно, что при длине последовательности 10 работает нормально, а при 100 - уже вот такой бред.

Решение задачи: «StreamWriter не записывает последовательность чисел в файл»

textual
Листинг программы
using (StreamWriter stream = new StreamWriter(numEl + "_" + i + ".own", false, System.Text.Encoding.UTF8))
{
   //...
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5
Похожие ответы