Вход/Регистрация
C# для профессионалов. Том II
вернуться

Ватсон Карли

Шрифт:

Вот как выглядит работа

BinaryFileReader
при просмотре текстового файла (так как
BinaryFileReader
может просматривать любой файл, вполне возможно использовать его для текстовых файлов так же, как и для двоичных.) В этом случае пример считывает файл, содержащий переговоры, которые происходили в известной игре "Цивилизация".

Очевидно, что этот формат больше подходит для просмотра значений отдельных байтов, а не для вывода текста. Позже в этой главе будет дан пример, специально созданный для чтения текстовых файлов, тогда можно будет увидеть содержимое такого файла. С другой стороны, преимущество этого примера состоит в том, что мы можем увидеть содержимое любого файла.

Для этого примера запись в файлы не показана. Это связано с тем, что мы не хотим увязнуть в сложностях попыток перевода содержимого текстового поля, представленного выше, в двоичный поток. Мы рассмотрим запись в файлы позже, когда разработаем пример, который может считывать и записывать текстовые файлы.

Итак, запишем код. Вначале добавим дополнительные инструкции

using
, так как помимо
System.IO
этот пример будет использовать класс
StringBuilder
из пространства имен
System.Text
для создания строк текстового поля:

using System.IO;

using System.Text;

Затем добавляются поля в класс основной формы, одно для представления файлового диалога, и строка, которая задает путь доступа к файлу, просматриваемому в текущий момент:

public class Form1 : System.Windows.Forms.Form {

 OpenFileDialog ChooseOpenFileDialog = new OpenFileDialog;

 string ChosenFile;

Нам нужно также добавить стандартный код формы Windows для работы методов обработки меню и файлового диалога:

 public Form1 {

InitializeComponent;

menuFileOpen.Click += new EventHandler(OnFileOpen);

ChooseOpenFileDialog.FileOk += new CancelEventHandler(OnOpenFileDialogOK);

 }

 void OnFileOpen(object Sender, EventArgs e) {

ChooseOpenFileDialog.ShowDialog;

 }

 void OnOpenFileDialogOK(object Sender, CancelEventArgs e) {

ChosenFile = ChooseOpenFileDialog.FileName;

this.Text = ChosenFile;

DisplayFile;

 }

Из этого кода мы видим, что, когда пользователь нажимает OK, чтобы выбрать файл в файловом диалоге, вызывается метод

DisplayFile
, который реально выполняет работу считывания файла:

 void DisplayFile {

int nCols = 16;

FileStream InStream = new FileStream(ChosenFile, FileMode.Open, FileAccess.Read);

long nBytesToRead = InStream.Length; if (nBytesToRead > 65536/4)

nBytesToRead = 65536/4;

int nLines = (int)(nBytesToRead/nCols) + 1;

String [] Lines = new string[nLines];

int nBytesRead = 0;

for (int i=0; i<nLines; i++) {

StringBuilder NextLine = new StringBuilder;

NextLine.Capacity = 4*nCols;

for (int j = 0; j<nCols; j++) {

int NextByte = InStream.ReadByte;

nBytesRead++;

if (NextByte <0 || nBytesRead > 65536) break;

char NextChar = (char)NextByte;

if (NextChar < 16)

NextLine.Append(" x0" + string.Format("{0,1:X}", (int(NextChar));

else if (char.IsLetterOrDigit(NextChar) || char.IsPunctuation(NextChar))

(NextLine.Append(" " + NextChar + " ");

else NextLine.Append(" x" + string.Format("{0,2:X}", (int)NextChar));

}

Lines[i] = NextLine.ToString;

}

InStream.Close;

this.textBoxContents.Lines = Lines;

 }

Разберем данный метод подробнее. Мы создаем экземпляр

FileStream
для выбранного файла и хотим открыть существующий файл для чтения. Затем мы определяем, сколько существует байтов для чтения и сколько строк должно выводиться. Число байтов обычно равно числу байтов в файле. Однако текстовые поля могут выводить максимум только 65536 символов, и для выбранного формата выводится 4 символа для каждого байта в файле, поэтому необходимо сделать ограничение числа показываемых байтов, если файл длиннее 65536/4 = 16384.

  • Читать дальше
  • 1
  • ...
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: