Как мне прочитать строку длины n из StreamReader? - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть StreamReader, и я хочу прочитать следующие n байты и вернуть их в виде строки.

Существует только метод ReadLine(), возвращающий строку, но мой файл не имеет разрывы строк (CR / LF). Read() возвращает int вместо, а ReadBlock() заполняет char[].

Есть ли простой способ сделать это? Должен ли я использовать Encoding.GetString()? Тогда мне нужно будет прочитать в byte[].

Я вижу проблему с кодировками и символами с более чем 1 байтом, поэтому, если быть точным, я хочу прочитать n байтов, и кодировка должна учитываться.

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

это должно помочь:

private byte[] ReadPartial(Stream source, byte[] buffer, int start, int length)
{
    //the second parameter on the streamreader 
    //says that it should detect the encoding
    using(var reader = new StreamReader(source, true))
    {
        reader.BaseStream.Read(buffer, start, length);
    }
    return buffer;
}
0 голосов
/ 24 апреля 2020

это интересно:

Это не работает (без чтения, m = 0):

        byte[] buffer = new byte[4];
        int m = sr.BaseStream.Read(buffer, 0, 4);
        string s = sr.CurrentEncoding.GetString(buffer);

, но это делает:

        char[] cs= new char[4];
        sr.ReadBlock(inhalt, 0, 4);
        string s = new string(cs);

Таким образом, я предположим, что использование BaseStream не очень хорошая идея.

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