Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по C#.doc
Скачиваний:
259
Добавлен:
08.11.2018
Размер:
5.81 Mб
Скачать
      1. Диалоговые окна OpenFileDialog и SaveFileDialog

Компоненты Windows Forms OpenFileDialog и SaveFileDialog являются стандартными диалоговыми окнами. Эти компоненты аналогичны диалоговым окнам Открыть файл и Сохранить файл операционной системы Windows.

Компоненты OpenFileDialog и SaveFileDialog используются в приложении Windows в качестве простого решения для выбора файлов вместо диалогового окна, настраиваемого самостоятельно. Использование стандартных диалоговых окон Windows помогает создавать приложения, основные функциональные возможности которых хорошо знакомы пользователям. Однако следует помнить, что при использовании компонент OpenFileDialog и SaveFileDialog необходимо разработать собственный алгоритм открытия файла и записи данных в файл.

Используйте метод ShowDialog для отображения диалогового окна во время выполнения. При помощи свойства Multiselect элемента управления OpenFileDialog пользователям можно разрешить выбор нескольких файлов для открытия в приложения. Кроме того, с помощью свойства ShowReadOnly элемента управления OpenFileDialog можно задать отображение в диалоговом окне флажка "Только для чтения". Свойство Filter компонентов OpenFileDialog и SaveFileDialog задает строку фильтра для текущего имени файла, которая определяет варианты, отображающиеся в поле "Тип файлов" диалогового окна.

Добавленный в форму компонент OpenFileDialog или SaveFileDialog появляется в нижней области конструктора Windows Forms в области невидимых объектов.

Чтение данных их файла и запись в файл в C#

Для операций ввода-вывода служит пространство имен System.IO.

Вот краткий обзор наиболее важных классов и методов из этого пространства имен:

  • BinaryReader – метод, позволяющий читать из файла данные различных типов (целые, вещественные, логические и т. п.);

  • BinaryWriter – метод, позволяющий записывать в файл данные различных типов (целые, вещественные, логические и т. п.);

  • Directory – класс для работы с папками;

  • DirectoryInfo – класс для работы с одной определенной папкой;

  • File – класс для работы с файлом;

  • FileInfo – класс для работы с одним определенным файлом;

  • Path – класс для работы с файловыми путями;

  • Перечисление FileAttributes – атрибуты файла;

  • Перечисление FileMode – возможные способы открытия файла;

  • Перечисление FileAccess содержит константы, показывающие, открыт ли файл для чтения, записи и др.;

  • FileSystemWatcher – класс для отслеживания изменений в файловой системе;

  • Перечисление NotifyFilters – параметры, по которым происходит отслеживание изменений в файловой системе;

  • Перечисление WatcherChangeTypes –изменения, отслеживаемые в файловой системе.

Запись в файл с использованием компонента SaveFileDialog

Чтобы записать данные в файл выполните следующие действия:

  1. Выберите в Панели элементов на вкладке Диалоговые окна элемент управления SaveFileDialog и добавьте его на форму в область невидимых элементов:

  1. Настройте свойства элемента управления SaveFileDialog в окне Свойства:

  • Filter=Название1|фильтр1|Название2|фильтр2…,

Например:

Filter= Текстовые файлы|*.txt|Все файлы|*.*

Filter= Текстовые файлы|*.txt

  • DefaultExt=расширение – расширение, которое будет приписано к имени файл, если пользователь не ввел свое расширение. При этом свойство AddExtension (автоматическое приписывание расширения файлам) должно иметь значение true.

  • FilterIndex=№ – индекс фильтра файлов по умолчанию. Нумерация начинается с единицы.

  • InitialDirectory=путь/папка – исходная папка диалогового окна.

  • Title=название – строка, отображаемая в заголовке программы

  1. Подключите библиотеку System.IO с помощью команды using в разделе подключения библиотек:

using System.IO;

  1. Для осуществления записи информации в текстовый файл необходимо прописать обработчик события для элемента управления, например обработчик нажатия кнопки:

private void button1_Click(object sender, EventArgs e)

{// Открываем стандартное окно Windows для сохранения информации в файл

if (saveFileDialog1.ShowDialog() == DialogResult.OK)

{

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

StreamWriter FS = new StreamWriter(saveFileDialog1.FileName);

// или

// StreamWriter FS = new StreamWriter(saveFileDialog1.FileName, true,

System.Text.Encoding.GetEncoding(1251));

// Записываем информацию в файл

FS.Write("Здесь можно вставить текст, например, из текстового поля - textBox1.Text");

// Закрываем файл

FS.Close();

}

}

При записи с помощью метода Write("текст формат") можно использовать строку форматирования, которая имеет следующий вид:

{N,W:F},

где N - номер параметра; W - ширина поля; F - формат вывода.

Допустимые форматы ввода:

  • d - десятичный формат. Позволяет задать общее количество знаков (при необходимости число дополняется слева нулями).

  • f - формат с фиксированной точностью. Позволяет задать количество знаков после запятой.

  • x - шестнадцатеричный формат.

  • c - денежный формат (добавляет знак доллара и показывает два знака после запятой).

  • e - вывод числа в экспоненциальной форме.

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

Код:

private void button14_Click(object sender, EventArgs e)

{

if (saveFileDialog1.ShowDialog() == DialogResult.OK)

{

StreamWriter FS = new StreamWriter(saveFileDialog1.FileName);

int a=Convert.ToInt16(textBox1.Text);

//Если введено a=38, то выведется 0038

FS.Write ("a={0:d4}", a);

FS.Close();

}

}

Примечание. Если путь к исходной папке задан неверно, то открывается папка «Мои документы».

Примечание. Если файл уже существует, то система выведет стандартное для операционной системы Windows предупреждение с предложением файл заменить.

Примечание. За действие, выполняемое в случае наличия выбранного файла отвечает второй аргумент в команде new StreamWriter:

new StreamWriter(имя файла, действие если файл уже существует, кодировка).

Если вторым аргументом стоит значение True, то произойдет дозапись в файл. Если вторым аргументом стоит значение False, то старая информация из файла будет стерта, а на ее место записана новая.

Запись двумерного массива размера [n,m] в файл

Чтобы записать в файл данные из таблицы dataGridView в форме матрицы необходимо прописать код, аналогичный следующему:

if (saveFileDialog1.ShowDialog() == DialogResult.OK)

{ StreamWriter FS = new StreamWriter(saveFileDialog1.FileName);

for (i = 0; i < n; i++)

{

for (j = 0; j < m; j++)

{

FS.Write("{0,3}", dataGridView1[j, i].Value);

};

FS.WriteLine();

};

FS.Close();

}

Примечание. Ширина одного столбца матрицы в файле равно 3.

Примечание. Один элемент массива можно записать в файл следующим образом:

FS.Write("\t {0}", A[1, 1]);

Чтение данных из файла

Алгоритм чтения данных из файла схож с алгоритмом записи данных в файл: компонент SaveFileDialog следует заменить на компонент OpenFileDialog, установить для компонента OpenFileDialog свойства, аналогичные свойствам компонента SaveFileDialog. Прописать код, аналогичный следующему:

private void button1_Click(object sender, EventArgs e)

{string s;

// Открываем стандартное окно Windows для чтения информации из файла

if (openFileDialog1.ShowDialog() == DialogResult.OK)

{

// Создаем файловую переменную, ссылающуюся на имя файла, выбранного в диалоговом окне чтения и открываем файл для считывания данных

StreamReader FS = new StreamReader (openFileDialog1.FileName);

// Считываем информацию из файла

s= FS.Readline();

// Закрываем файл

FS.Close();

}

}

Пример. Строка считывается из файла и прописывается на кнопке.

private void button15_Click(object sender, EventArgs e)

{ string s;

if (openFileDialog1.ShowDialog() == DialogResult.OK)

{ StreamReader FS = new StreamReader (openFileDialog1.FileName);

s = FS.ReadLine();

FS.Close();

button15.Text = s;

}

}

Чтение двумерного массива размера [n,m] из файла

Чтобы считать из файла данные и записать их в таблицу dataGridView необходимо прописать код, аналогичный следующему:

if (openFileDialog1.ShowDialog() == DialogResult.OK)

{ StreamReader FS = new StreamReader(openFileDialog1.FileName);

for (i = 0; i < n; i++)

{ s = FS.ReadLine();

for (j = 0; j < m; j++)

{ dataGridView1[j, i].Value = s.Substring(0, 3);

s = s.Substring(3, s.Length-3);

};

};

FS.Close();

}

Примечание. Ширина одного столбца матрицы в файле равно 3.