Странный вопросительный знак, при установке StreamReader на начало - PullRequest
0 голосов
/ 13 февраля 2019

Я пишу программу про собеседование.Все работает правильно, кроме одного.Когда я использую внешний метод TotalLines (где у меня есть отдельный StreamReader), он работает правильно, но когда я вычисляю количество totalLines в программе, я получаю один знак вопроса в начале первого вопроса.Вот так:

? Как вас зовут?

но в текстовом файле, из которого я читаю, у меня просто - Что такоеваше имя?

Понятия не имею, почему это так.Может быть, проблема в том, что я возвращаю StreamReader в начало?Я проверил свою кодировку, все, но ничего не работало.Спасибо за помощьЕсть идеи?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Весьма вероятно, что файл начинается с метки порядка следования байтов (BOM) , которая изначально игнорируется читателем, но не тогда, когда вы «перематываете» поток.

Хотя вы могли бы создать новый считыватель или даже просто заменить его после прочтения, я думаю, что было бы лучше просто не читать файл дважды, чтобы начать с:

foreach (var question in File.ReadLines(text, Encoding.Unicode))
{
    Console.WriteLine(question);
    string response = Console.ReadLine();
    potentialEmployee.Responses.Add(question, response);
}

Этокороче, проще, эффективнее код, который также не отображает проблему, о которой вы спрашивали.

Если вы хотите убедиться, что можете прочитать весь файл, прежде чем задавать какие-либо вопросы, это тоже просто:

string[] questions = File.ReadAllLines(text, Encoding.Unicode);
foreach (var question in questions)
{
    Console.WriteLine(question);
    string response = Console.ReadLine();
    potentialEmployee.Responses.Add(question, response);
}
0 голосов
/ 13 февраля 2019

Всякий раз, когда вы ищите свой поток в начале, метка порядка байтов (BOM) не читается снова, это делается только в первый раз после создания считывателя потока с указанной кодировкой.

Для того, чтобыЧтобы правильно прочитать спецификацию, необходимо создать новый потоковый ридер.Тем не менее, вы можете повторно использовать поток, если вы даете указание считывателю потока сохранять поток открытым после его удаления, но обязательно выполните поиск перед созданием нового считывателя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...