Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Feu
0 / 0 / 0
Регистрация: 12.06.2017
Сообщений: 8
1

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

21.06.2017, 09:49. Просмотров 1024. Ответов 6
Метки нет (Все метки)

Здравствуйте!
Нужно сгенерировать заданное количество файлов с выбранного типа последовательностью чисел (записанных через пробел) заданной длины. Есть тип последовательности "С заданными числами", которая по задумке формирует последовательность из введённых чисел (если их количество меньше, чем длина последовательности, то они повторяются с начала, и так до конца, как-то так). И вот на этом типе не работает. Файл создаётся, но остаётся пустым. Так как работа сама большая, оставлю только часть кода. Объясните, пожалуйста, в чём ошибка

Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
                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;


Добавлено через 8 минут
Подождите. Я не закрываю StreamWriter. Теперь так:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 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 - уже вот такой бред.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2017, 09:49
Ответы с готовыми решениями:

Почему StreamWriter не все записывает?
Здравствуйте. Есть код, который &quot;обходит&quot; все файлы и директории и пути к ним записывает в файл...

StreamWriter не пишет в файл.
using System; using System.IO; namespace GetOrder { class TnsNameWriter { ...

StreamWriter перестает записывать в файл
FileStream file = new FileStream(&quot;D:\\inputO.txt&quot;, FileMode.Create, FileAccess.ReadWrite); ...

Запись в файл используя streamwriter
1.) Как сделать так чтоб при нажати на кнопку текст добавлялся в текстовый файл, и каждые новый...

StreamWriter перестает записывать данные в файл
Добрый День! Проблема такая, что streamWriter = new StreamWriter(&quot;Result.txt&quot;, false,...

6
Даценд
Модератор
Эксперт .NET
5041 / 4299 / 2795
Регистрация: 20.04.2015
Сообщений: 7,757
21.06.2017, 09:54 2
Feu,
Нужно вовремя закрывать поток. Проще всего использовать блок using:
C#
1
2
3
4
5
6
7
8
9
10
11
12
using (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++;
    }
}
0
Feu
0 / 0 / 0
Регистрация: 12.06.2017
Сообщений: 8
21.06.2017, 10:03  [ТС] 3
Даценд,
Да, вот переделала, только закрываю по-другому. Даже сделала, как у вас - остаётся проблема с непонятными символами. Причём, как я посмотрела, записываться бред начинает с последовательностей из 50-ти элементов и далее, с меньшим количеством формируются нормальные последовательности.
0
Даценд
Модератор
Эксперт .NET
5041 / 4299 / 2795
Регистрация: 20.04.2015
Сообщений: 7,757
21.06.2017, 10:17 4
Feu,
Проверил, убрав, дабы не рисовать, контролы и генерируя массив рандомно. Всё работает:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
int numSeq = 110, numEl = 1; //numSeq - количество последовательностей (файлов)
int[] el = new int[60]; //массив заданных чисел
Random rnd = new Random();
for (int i = 0; i < 60; i++)
    el[i] = rnd.Next(10);
try
{
    //el = Array.ConvertAll(str.Split(' '), Convert.ToInt32); //формируем массив заданных чисел, если получится
    int k = 0;
    for (int i = 1; i <= numSeq; i++)
    {
        using (StreamWriter stream = new StreamWriter(@"d:\000" + numEl + "_" + i + ".own"))
        {
            for (int j = 0; j < numEl; j++) //numEl - количество элементов
            {
                if (k >= el.Length)
                {
                    k = 0;
                }
                stream.Write((el[k]) + " "); //запись числа с пробелом после
                k++;
            }
        }
        numEl += 1; //step - шаг изменения кол-ва элементов в последовательностях, если их несколько
    }
    MessageBox.Show("Генерация завершена!", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
    //очистка всех окошек
}
catch
{
    MessageBox.Show("Недопустимые символы ввода в строку для заданных элементов!" + "\n" + "Введите числа через пробел.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
    return;
}
0
Feu
0 / 0 / 0
Регистрация: 12.06.2017
Сообщений: 8
21.06.2017, 10:46  [ТС] 5
Даценд,
Повторила, но по-прежнему, начиная с файла "00050_50.own" и далее, вижу внутри набор символов, как на прикреплённом скрине
0
Миниатюры
StreamWriter не записывает последовательность чисел в файл  
Даценд
Модератор
Эксперт .NET
5041 / 4299 / 2795
Регистрация: 20.04.2015
Сообщений: 7,757
21.06.2017, 12:15 6
Лучший ответ Сообщение было отмечено Feu как решение

Решение

Feu,
попробуйте
C#
1
2
3
4
using (StreamWriter stream = new StreamWriter(numEl + "_" + i + ".own", false, System.Text.Encoding.UTF8))
{
   //...
}
1
Feu
0 / 0 / 0
Регистрация: 12.06.2017
Сообщений: 8
21.06.2017, 12:31  [ТС] 7
Даценд,
Теперь всё в порядке, спасибо большое!
0
21.06.2017, 12:31
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.06.2017, 12:31

Программа запрашивает у пользователя 10 чисел и записывает в файл
Помогите кто нить с написанием этой программы, а то у меня что то цикл с параметром хромает. Надо...

Написать программу которая записывает в файл n положительных чисел, не используя рандом
Написать программу которая записывает в файл n положительных чисел, не используя рандом

Программа которая находит первые 500 простых чисел и записывает их в файл
На языке СИ.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru