С# для Windows. Основы работы с файлами и директориями в C#

Раздел 2 Основы работы с файлами и директориями в C#

В начало

Глава 1 Использование контролов OpenFileDialog и SaveFileDialog для работы с файлами

Для изучения работы с контролами OpenFileDialog и SaveFileDialog создадим новое решение (подробно о создании проекта решения было раказано в первом разделе книги) или изменим уже ипользованный проект (убрав коды обработчиков событий нажатия кнопок, изменив надписи и картиночки) и поместим на форму контролы RichTextBox, OpenFileDialog и SaveFileDialog. Контролы OpenFileDialog и SaveFileDialog не визуальные и, потому, разместились ниже формы. Проект решения с которым будем работать примет вид, показанный на Рис.1.

opsavdialog001.gif

Рис.1 Проект решения для работы с OpenFileDialog и SaveFileDialog

Дважды кликнем на форме (вне контролов) и, таким образом, создадим обработчик Form1_Load, который будет вызываться при каждой загрузки формы и который в дальнейшем будем часто использовать для начальной инициализации параметров программы и переменных. В обработчике запишем код очистки RichTextBox:

private void Form1_Load(object sender, System.EventArgs e)
{
 richTextBox1.Clear();
}

Обработчик нажатия кнопки 3 оставим прежний:

private void button3_Click(object sender, System.EventArgs e)
{
 Application.Exit();
}


В начало

Параграф 1 Ипользование контрола OpenFileDialog


В начало

Основные свойства OpenFileDialog

Свойство AddExtension разрешает или запрещает автоматическое добавление расширение, указанное в свойстве DefaultExt.

Свойство DefaultExt - расширение, принятое по умолчанию для автоматического добавления к имени файла при AddExtension=true.

Свойство CheckFileExists - используется для получения или устанавки значения, указывающего отображать или нет диалоговое окно предупреждения, если пользователь указал в свойстве FileName имя файла, которого не существует в данной директории и нажал кнопку "Oткрыть" при невыбранном кликом мышки файле. При CheckFileExists=true вместо прерывания будет выдано сообщение, что такого файла нет и исключения не вызывается.

На Рис.2 показано окно предупреждение при FileName=a.doc, CheckFileExists=true и нажатии кнопки "Oткрыть" при невыбранном файле.

opsavdialog002.gif

Рис.2 Окно предупреждения при CheckFileExists=true

Свойство FileName - имя файла по умолчанию для выборки если была нажата кнопка OK и не выбрн кликом мышки файл в окне диалога.

Свойство CheckPatchExists - используется для получения или устанавки значения, указывающего отображать или нет диалоговое окно предупреждения, если пользователь указал в свойстве FileName имя файла с несуществующим именем директории. Окно полностью анлогично показанному на Рис.2., например, при FileName=С:\3\a.doc и не выбранном файле в директории C:\ и нажатии кнопки "Oткрыть" будет выдано сообщение, поазанное на Рис.3. При CheckPatchExists=true вместо прерывания будет выдано только сообщение.

opsavdialog003.gif

Рис.3 Окно предупреждения при CheckPatchExists=true

Свойство DereferenceLinks - используется для указания контролу что именно возвращпть при выборе файла ссылки - файл по ссылке (true) или файл самой сылки (false).

Свойства Filter, FilterIndex - фильтр для выбираемых файлов и индекс строки, отображаемой в окошечке "Имя файла". Например значение свойства заданного строкой при FilterIndex=1.

rtf файлы (*.rtf)|*.rtf|txt файлы(*.txt)|*.txt

позволит выбрать только текстовые файлы в формате rtf или txt. В окошечке "Тип файла" будет только две строки:

rtf файлы (*.rtf)
txt файлы(*.txt)

а в окошечке "Имя файла" будет отображена первая.

Свойство InitialDirectory - директория, которая выбирается при старте OpenFileDialog.

Свойство MultiSelect - при значении true позволяет выбрать мышкой при нажатой кнопке Shift или Ctrl несколько файлов и сохранить их имена в свойстве FileNames в виде массива строк.

Свойство ReadOnlyChecked - при значении true позволяет открывать команде OpenFile выбранные файлы только в режиме чтения.

Свойство RestoreDirectory - при true диалоговое окно восстанавливает текущий каталог к первоначальному значению если пользователь изменил каталог при поиске файлов, при false - нет.

Свойство работает только если закрыт поток Stream, созданный методом openFileDialog1.OpenFile().

Свойство ShowHelp - при значении true в окне диалога отображается кнопка "Справка".

Свойство ShowReadOnly - при значении true в окне диалога отображается переключатель "Только для чтения".

Свойство Title - заголовок диалогового окна.

Свойство ValidateNames - при true проверяет допустимость имени для файла применительно к Win32. Никакое заданное по умолчанию в этом случае не добавляется.

Отметим, что ве свойcтва могут быть заданы на этапе проектирования и программно - путем присвоения соответствующих значений.


В начало

Загрузка содержимого файла с использованием OpenFileDialog

Утановим для OpenFileDialog следующие значения свойств:

  • Filter - rtf файлы (*.rtf)|*.rtf

  • InitialDirectory - C:\

Пометим в директорию C:\ какой либо файл в формате .rtf (например который был создан в первом разделе "a.tf") и загрузим его в RichTextBox. Для этого напишем в обработчике нажатия кнопки 1 следующий код:

private void button2_Click(object sender, System.EventArgs e)
{
 string filename;
 //Если диалог отображен и нажата кнопка выбрать
 if(openFileDialog1.ShowDialog() == DialogResult.OK)
 {
  //Имя файла и директории хранитя в войстве FileName как строка
  filename= openFileDialog1.FileName;
  //Покажем имя 
  Text=filename;
  //Создаем поток
  Stream stream = openFileDialog1.OpenFile();
  //Загружаем файл в RichTextBox
  richTextBox1.LoadFile(stream,RichTextBoxStreamType.RichText);
  //Закрываем поток
  stream.Close();    	
 }
}

Ели мы выбрали файл C:\a.rtf, то это имя отобразится в заглавии формы.

Если теперь в войстве FileName запишем a.rtf, то при открытии диалога буковка "a" появляется в окошечке "Имя файла" и можно выполнить загрузку не выбирая мышкой файл, а сразу нажав кнопочку "OK".

Дотаточно в войстве FileName записать a.doc и повторить то, что только что проделали выше, как получим предупреждение об отсутствии файла (см Рис.2) и файл уже придется выбирать кликом мышки (кстати, отетим еще раз, что если утановить войство CheckFileExists в false то получим возбуждение иключения).

Рассмотрим еще один способ, который позволяет загружать фйлы в формате .txt. Добавим на форму контрол TextBox и установим его свойство MultiLine в true, в обработчике Form1_Load допишем строку

textBox1.Text="";

а cвойству Filter присвоим значение

rtf файлы (*.rtf)|*.rtf|txt файлы(*.txt)|*.txt

В обработчике события нажатия кнопки 1 напишем код для чтения текстовых файлов.

private void button1_Click(object sender, System.EventArgs e)
{
 openFileDialog1.Filter="rtf файлы (*.rtf)|*.rtf|txt файлы(*.txt)|*.txt";
 if(openFileDialog1.ShowDialog() == DialogResult.OK)
 {
  System.IO.StreamReader streamReader;
  streamReader = new System.IO.StreamReader(openFileDialog1.FileName);
  richTextBox1.Text = streamReader.ReadToEnd();
  streamReader.Close();
  //Можно указть кодировку вывода отличную от кодировке по умолчанию
  streamReader = new System.IO.StreamReader(openFileDialog1.FileName,
	System.Text.Encoding.GetEncoding("windows-1252"));
  textBox1.Text = streamReader.ReadToEnd();
  streamReader.Close();
 }
}

Ели прочитаем текстовый файл в формате .rtf, то увидим уже знакомое нам по первому разделу содержимое файла, а при чтении текстового файла в формате .txt именно текст (см Рис.4).

opsavdialog004.gif

Рис.4 Чтение файлов в формате .rtf(сле) и.txt(спрва) в ткстовом режиме


В начало

Параграф 2 Ипользование контрола SaveFileDialog


В начало

Основные свойства SaveFileDialog

Следует отметить, что все свойства отображаемые в окне Proporties для SaveFileDialog аналогичны OpenFileDialog и имеют тоже назначение и тот же принцип использования, и, поэтому, в отдельном их расмотрении нет необходимости.


В начало

Сохранение информации в файл с использованием SaveFileDialog

Уcтановим для SaveFileDialog следующие значения свойств:

  • Filter - rtf файлы (*.rtf)|*.rtf|txt файлы(*.txt)|*.txt

  • InitialDirectory - C:\

  • DefaultExtension - rtf

Последнее актуально именно для SaveFileDialog и позволяет не задавать в окошечке "имя файла" полное имя если файл будет сохраняться как .rtf файл.

Для обработчика события нажатия кнопки 2 нпишем следующий код:

private void button1_Click(object sender, System.EventArgs e)
{
 MemoryStream memorystream = new System.IO.MemoryStream();
 Stream filestream;
 if(saveFileDialog1.ShowDialog() == DialogResult.OK)
 {
  //ассоциируем поток с именем файла - если фйла нет создаем
  filestream = saveFileDialog1.OpenFile();				
  memorystream.Position = 0;
  //сохраняем в поток содержимое richTextBox1
  richTextBox1.SaveFile(memorystream, 
		RichTextBoxStreamType.PlainText);
  //переносим в файл информацию и закрываем поток
  memorystream.WriteTo(filestream);
  filestream.Close();
 }
}

Для записи в формате .txt обычно используется StreamWriter, как это мы уже делали в предыдущем разделе (не забудем также подключить using System.IO;).

private void button1_Click(object sender, System.EventArgs e)
{
 if(saveFileDialog1.ShowDialog() == DialogResult.OK)
 {
  StreamWriter streamwriter = 
    new System.IO.StreamWriter(saveFileDialog1.FileName, false,
     System.Text.Encoding.GetEncoding("utf-8"));
  //Из TextBox
  streamwriter.Write(this.textBox1.Text);
  //Из RihTextBox - если убрать слэши - оба 
  //текста контролов будут в одном файле
  //streamwriter.Write(this.richTextBox1.Text);
  streamwriter.Close();
 }
}

Еcли Вы пришли с поискового сервера - посетите мою главную страничку

На главной странице Вы найдете программы комплекса Veles - программы для автолюбителей, программу NumberPhoto, созданную для работы с фото, сделанными цифровым фотоаппаратом, программу Локальный Web сайт - предназначенную для просмотра и прослушивания файлов большинства графических и звуковых форматов в Web Browser, программу Bricks - игрушку для детей и взрослых, программу записную книжку, программу TellMe - говорящий Русско-Английский разговорник - программу для тех, кто собирается погостить за бугром или повысить свои знания в английском, теоретический материал по программированию в среде Borland C++ builder, C# (ASP.Net).

В начало страницы, главы и раздела

В начало книги

На главную страницу


Сайт управляется системой uCoz