Не удается преобразовать BinaryReader.PeekChar или readChar в строку C#

#c#

#c#

Вопрос:

Всякий раз, когда я пытаюсь преобразовать BinaryReader PeekChar или ReadChar в строку, это выдает ошибку

Ошибка 1 ‘System.IO.BinaryReader.PeekChar()’ — это ‘метод’, который недопустим в данном контексте

Как мне это преобразовать? Вот мой пример кода:

  private void openTextToolStripMenuItem_Click(object sender, EventArgs e)
    {
        myPath = textBox3.Text;
        BinaryReader objBinReader = new BinaryReader(File.Open(myPath, FileMode.Open));
        listBox1.Hide();
        richTextBox1.Show();

        richTextBox1.Text = "";
        do
        {

            try
            {
                richTextBox1.Text = richTextBox1.Text   objBinReader.ReadChar.toString();
            }
            catch
            {
                MessageBox.Show(objBinReader.PeekChar.toString());
            }
        } while (objBinReader.PeekChar.toString() != "-1");

        objBinReader.Close();

    }
  

Заранее спасибо!

Комментарии:

1. Ошибка довольно очевидна — вы пытаетесь использовать метод, как если бы это было свойство

2. Следующей ошибкой компиляции будет то, что toString() не существует. Вызывается метод ToString()

3. PeekChar возвращает значение int, а не Char . Перед использованием вам придется преобразовать его в Char , иначе вы получите строку со значением numerica

4. возможно, вам следует решить еще несколько проблем (поместить ваш двоичный файл чтения в блок using, используя StringBuilder вместо объединения строк, поскольку строка неизменяема)

Ответ №1:

Вам не хватает () для вызовов метода

 richTextBox1.Text = richTextBox1.Text   objBinReader.ReadChar().ToString();
  

и

 objBinReader.PeekChar().ToString()
  

Комментарии:

1. toString() будет следующая ошибка компиляции и приведет к неожиданным результатам — PeekChar возвращает значение int

Ответ №2:

Фактически, вы читаете файл char после char . Почему бы не сделать это за один (простой) раз?

  private void openTextToolStripMenuItem_Click(object sender, EventArgs e)
 {
     listBox1.Hide();

     richTextBox1.Text = File.ReadAllText(textBox3.Text);

     richTextBox1.Show();
 }
  

Альтернативным решением с BinaryReader будет

  private void openTextToolStripMenuItem_Click(object sender, EventArgs e)
 {
     listBox1.Hide();

     // when building string in a loop use StringBuilder
     StringBuilder sb = new StringBuilder();  

     // do not close BinaryReader manually, put using instead 
     using (BinaryReader objBinReader = new BinaryReader(File.OpenRead(textBox3.Text)))
     {
         // PeekChar() is a method, notice () 
         while (objBinReader.PeekChar() != -1) 
             sb.Append(objBinReader.ReadChar()); // ReadChar() is a method as well
     } 

     richTextBox1.Text = sb.ToString();
     richTextBox1.Show();
 }
  

Комментарии:

1. возможно, потому что файл является двоичным файлом? просто спрашиваю

2. @Radinator: каждый файл можно рассматривать как текстовый (однако это будет странный текст для реальных двоичных файлов, таких как dll, exe); код в вопросе использует PeekChar , ReadChar , а не PeekByte и ReadByte , так что это явная попытка (по крайней мере, для меня) прочитать файл как текст.