#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
, иначе вы получите строку со значением numerica4. возможно, вам следует решить еще несколько проблем (поместить ваш двоичный файл чтения в блок 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
, так что это явная попытка (по крайней мере, для меня) прочитать файл как текст.