Member 10525430 Ответов: 4

Ошибка чтения txt C# streamreader


int i = 0;
StreamReader reader = new StreamReader(@"3235.txt", System.Text.Encoding.Default);
    string line = reader.ReadLine();
var row = new DataGridViewRow();
dataGridView1.Rows.Add();
dataGridView1.Rows[i].Cells[0].Value = line.Substring(40, 6) ;



мой текст:
0409253100GRİTALYAN SUCUK         137     925310  0VAN-PA GIDA PAZ.TUR.               028273
040925380GR.İTALYAN SUCUK         137     925310  0VAN-PA GIDA PAZ.TUR.               028273

я не могу понять, почему этот код читает вторую строку txt-файлов?
когда я запустил код, то получил только 040925380GR.ITALYAN SUCUK 137 925310 0VAN-PA GIDA PAZ.TUR. 028273

Что я уже пробовал:

добавление пустой строки в txt-файл работает нормально, но это не мое желание.

4 Ответов

Рейтинг:
33

turanian

Вы можете прочитать каждую строку и добавить в datagrid вот так.

int i = 0;

               using (StreamReader reader = new StreamReader(@"3235.txt", System.Text.Encoding.Default))
               {
                   while (reader.Peek() >= 0)
                   {
                       string line = reader.ReadLine();
                       var row = new DataGridViewRow();
                       dataGridView1.Rows.Add();
                       dataGridView1.Rows[i].Cells[0].Value = line.Substring(40, 6);
                       i++;
                   }
               }


Рейтинг:
1

Patrice T

Кажется невозможным, чтобы код, который вы показываете, начинал читать файл со второй строки.
Используйте отладчик, чтобы увидеть, что вставлено line первый reader.ReadLine().

Отладчик позволяет вам следить за выполнением строка за строкой, проверять переменные, и вы увидите, что есть точка, в которой он перестает делать то, что вы ожидаете.
Отладчик - Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
Когда код не делает того, что ожидается, вы близки к ошибке.


Рейтинг:
1

geograph

У меня есть такая же ошибка чтения StreamReader. Не знаю, почему это происходит. В другом текстовом/шестнадцатеричном Редакторе эти строки выглядят хорошо.

Возможно одна из этих вещей дает ошибку в моем случае:
- Файл слишком большой ~200 ГБ.
- Файл с NTFS-сжатием. Ошибка диска?
- Файл имеет новые строки в unix-формате "\n", а не "\r\n".


geograph

Хорошо, мое решение читается одним байтом от "\n" до "\n"

int chr;
var bytes = новый список<байт>();
пока ((ЧР = fileInput.ReadByte()) != -1)
{
если (chr == '\n')
{
var line = Encoding.UTF8.GetString(байты.Метод toArray());
вывод файла.WriteLine(строка);
байты.Четкий();
продолжить;
}
байты.Добавить((байт)chr);
}

CHill60

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

Рейтинг:
0

OriginalGriff

Если ваш текстовый файл-это именно то, что вы показываете:

Line 1
Line 2
Тогда то, что вы получите, - это исключение ArgumentOutOfRangeException, а не "вторая строка".
Поэтому я подозреваю, что ваш текстовый файл содержит не совсем то, что вы думаете.
Используйте отладчик. Поставьте точку останова на линии:
var row = new DataGridViewRow();
И используйте его, чтобы посмотреть, что именно входит в систему line - я предполагаю, что он содержит "строку 1", за которой следуют 34 пробела и "строка 2", а не то, что вы думаете...


Member 10525430

извините я пишу это examply

я добавляю оригинальные строки txt

OriginalGriff

Используйте отладчик и посмотрите, что вы получаете в "строке" - мы не можем сделать это за вас!