Добавляем на форму элементы TextBox и MainMenu. В MainMenu будет всего три пункта — File, Open и Save .В TextBox устанавливаем свойство Multiple в true.
Добавляем на форму элемент управления OpenFileDialog из окна панели инструментов ToolBox. Подобно элементу MainMenu, он будет располагаться на панели невидимых компонент:
рис.8
Свойство FileName задает название файла, которое будет находиться в поле "Имя файла:" при появлении диалога. На рис.8 название в этом поле — "Текстовые файлы".
Свойство Filter задает ограничение файлов, которые могут быть выбраны для открытия — в окне будут показываться только файлы с заданным расширением. Через вертикальную разделительную линию можно задать смену типа расширения, отображаемого в выпадающем списке "Тип файлов". Здесь введено Text Files (*.txt)|*.txt|All Files(*.*)|*.* что означает обзор либо текстовых файлов, либо всех.
Свойство InitialDirectory позволяет задать директорию, откуда будет начинаться обзор. Если это свойство не установлено, исходной директорией будет рабочий стол.
Из окна ToolBox перетаскиваем так же и элемент SaveFileDialog — свойства этого элемента в точности такие же, как и у диалога OpenFileDialog.
Переходим в код формы. Подключаем пространство имен для работы с файловыми потоками:
using System.IO;
Добавляем обработчик для пункта меню Open:
private void menuOpen_Click(object sender, System.EventArgs e)
{
//Показываем диалог выбора файла
openFileDialog1.ShowDialog();
// Переменной fileName присваиваем имя открываемого файла
string fileName = openFileDialog1.FileName;
//Создаем поток fs и открываем файл для чтения.
FileStream filestream = File.Open(fileName, FileMode.Open, FileAccess.Read);
//Проверяем, открыт ли поток, и если открыт, выполняем условие
if ( filestream != null )
{
//Создаем объект streamreader и связываем его с потоком filestream
StreamReader streamreader = new StreamReader(filestream);
//Считываем весь файл и записываем его в TextBox
txtBox.Text = streamreader.ReadToEnd();
//Закрываем поток.
filestream.Close();
}
}
Добавляем обработчик для пункта меню Save:
private void menuSave_Click(object sender, System.EventArgs e)
{
//Показываем диалог выбора файла
saveFileDialog1.ShowDialog();
// В качестве имени сохраняемого файла устанавливаем переменную fileName
string fileName = saveFileDialog1.FileName;
//Создаем поток fs и открываем файл для записи.
FileStream filestream = File.Open(fileName, FileMode.Create, FileAccess.Write);
//Проверяем, открыт ли поток, и если открыт, выполняем условие
if ( filestream != null )
{
//Создаем объект streamwriter и связываем его с потоком filestream
StreamWriter streamwriter = new StreamWriter(filestream);
//Записываем данные из TextBox в файл
streamwriter.Write(txtBox.Text);
//Переносим данные из потока в файл
streamwriter.Flush();
//Закрываем поток
filestream.Close();
}
}
В консольном приложении:
// Открыть диалоговое окно для выбора файла
OpenFileDialog dlgOpen = new OpenFileDialog();
dlgOpen.Title = "Найдите требуемый файл"; // заголовок окна
// Показать окно
if (dlgOpen.ShowDialog() == DialogResult.OK)
{
FileStream fs = new FileStream(dlgOpen.FileName,FileMode.Open);
. . .
Работа с каталогами и файлами
В пространстве имен System.IO есть четыре класса, предназначенные для работы с физическими файлами и структурой каталогов на диске: Directory, File, Directorylnfo и Filelnfo. С их помощью можно выполнять создание, удаление, перемещение файлов и каталогов, а также получение их свойств.
Классы Directory и File реализуют свои функции через статические методы.
Directorylnfo и Filelnfo обладают схожими возможностями, но они реализуются путем создания объектов соответствующих классов.
DirectoryInfo - класс
Предоставляет методы экземпляра класса для создания, перемещения, копирования и перечисления объектов файловой системы в папках и вложенных папках.
[Serializable]
public sealed class DirectoryInfo : FileSystemInfo
Открытые конструкторы
DirectoryInfo - конструктор | Инициализирует новый экземпляр класса DirectoryInfo для указанного пути. |
Открытые свойства
Attributes (унаследовано от FileSystemInfo) | Возвращает или устанавливает FileAttributes для текущего класса FileSystemInfo. |
CreationTime (унаследовано от FileSystemInfo) | Возвращает или устанавливает время создания текущего объекта FileSystemInfo. |
CreationTimeUtc (унаследовано от FileSystemInfo) | Возвращает или устанавливает время создания текущего объекта FileSystemInfo в формате всеобщего скоординированного времени (UTC). |
Exists | Переопределен. Возвращает значение, определяющее, создана ли папка. |
Extension (унаследовано от FileSystemInfo) | Возврат строки, содержащей расширение файла. |
FullName (унаследовано от FileSystemInfo) | Возвращает полный путь к папке или файлу. |
LastAccessTime (унаследовано от FileSystemInfo) | Возвращает или устанавливает время последнего доступа к текущему файлу или папке. |
LastAccessTimeUtc (унаследовано от FileSystemInfo) | Возвращает или устанавливает дату и время последнего доступа к заданному файлу или папке в формате всеобщего скоординированного времени (UTC). |
LastWriteTime (унаследовано от FileSystemInfo) | Возвращает или устанавливает время последней операции записи в текущий файл или папку. |
LastWriteTimeUtc (унаследовано от FileSystemInfo) | Возвращает или устанавливает время последней операции записи в текущий файл или папку в формате всеобщего скоординированного времени (UTC). |
Name | Переопределен. Возвращает имя данного экземпляра DirectoryInfo. |
Parent | Возвращает родительскую папку указанной вложенной папки. |
Root | Возвращает корневой элемент пути. |
Открытые методы
Create | Создает папку. |
CreateObjRef (унаследовано от MarshalByRefObject) | Создает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для коммуникации с удаленными объектами. |
CreateSubdirectory | Создает вложенную папку или вложенные папки по указанному пути. Указанный путь должен относиться к текущему экземпляру класса DirectoryInfo. |
Delete | Переопределен. Удаляет из пути DirectoryInfo и его содержимое. Перегружен. |
Equals (унаследовано от Object) | Перегружен. Определяет, равны ли два экземпляра Object. |
GetDirectories | Возвращает вложенные папки текущей папки. Перегружен. |
GetFiles | Возвращает список файлов текущей папки. Перегружен. |
GetFileSystemInfos | Перегружен. Извлекает массив объектов со строгим типом FileSystemInfo. |
GetHashCode (унаследовано от Object) | Служит хеш-функцией для конкретного типа, пригоден для использования в алгоритмах хеширования и структурах данных, например в хеш-таблице. |
GetLifetimeService (унаследовано от MarshalByRefObject) | Извлекает служебный объект текущего срока действия, который управляет средствами срока действия данного экземпляра. |
GetObjectData (унаследовано от FileSystemInfo) | Устанавливает объект SerializationInfo с именем файла и дополнительными сведениями об исключении. |
GetType (унаследовано от Object) | Возвращает Type текущего экземпляра. |
InitializeLifetimeService (унаследовано от MarshalByRefObject) | Получает служебный объект срока действия, для управления средствами срока действия данного экземпляра. |
MoveTo | Перемещает экземпляр DirectoryInfo и его содержимое в другое место. |
Refresh (унаследовано от FileSystemInfo) | Обновление состояния объекта. |
ToString | Переопределен. Возвращает исходный путь, указанный пользователем. |
Пример использования класса Directorylnfo.
// Создаются два каталога, выводится информация о них
// и предпринимается попытка удаления каталога.
using System;
using System.IO;
class Class1
{
static void DirInfo (DirectoryInfo di)
{
// Вывод информации о каталоге
Console.WriteLine ("===== Информация о папке =====");
Console.WriteLine ("Полное имя: " + di.FullName);
Console.WriteLine ("Имя: " + di.Name);
Console.WriteLine ("Родительский каталог: " + di.Parent);
Console.WriteLine ("Создан: " + di.CreationTime);
Console.WriteLine ("Атрибуты: " + di.Attributes);
Console.WriteLine ("Корневой каталог: " + di.Root);
Console.WriteLine ("===========================");
}
static void Main ()
{
DirectoryInfo di1 = new DirectoryInfo (@"c:\MyDir");
DirectoryInfo di2 = new DirectoryInfo (@"c:\MyDir\temp");
try
{ // Создать каталоги
di1.Create ();
di2.Create ();
// Вывести информацию о каталогах
DirInfo (di1);
DirInfo (di2);
// Попытаться удалить каталог
Console.WriteLine ("Попытка удалить {0}.", di1.Name);
di1.Delete ();
}
catch (Exception)
{
Console.WriteLine ("Попытка не удалась ");
}
}
}
Примечание:
di1.Delete ( true); - можно удалить и непустой каталог.
FileInfo - класс
Предоставляет методы экземпляра для создания, копирования, удаления, перемещения и открытия файлов, а также помогает при создании объектов FileStream.
[Serializable]
public sealed class FileInfo : FileSystemInfo
Открытые конструкторы
FileInfo - конструктор | Инициализирует новый экземпляр класса FileInfo, действующего в качестве обертки для пути файла. |
Открытые свойства
Attributes (унаследовано от FileSystemInfo) | Возвращает или устанавливает FileAttributes для текущего класса FileSystemInfo. |
CreationTime (унаследовано от FileSystemInfo) | Возвращает или устанавливает время создания текущего объекта FileSystemInfo. |
CreationTimeUtc (унаследовано от FileSystemInfo) | Возвращает или устанавливает временя создания текущего объекта FileSystemInfo в формате всеобщего скоординированного времени (UTC). |
Directory | Возвращает экземпляр родительской папки. |
DirectoryName | Возвращает строку, описывающую полный путь к папке. |
Exists | Возвращает значение, показывающее, существует ли файл. Переопределен. |
Extension (унаследовано от FileSystemInfo) | Возврат строки, содержащей расширение файла. |
FullName (унаследовано от FileSystemInfo) | Возвращает полный путь к папке или файлу. |
LastAccessTime (унаследовано от FileSystemInfo) | Возвращает или устанавливает время последнего доступа к текущему файлу или папке. |
LastAccessTimeUtc (унаследовано от FileSystemInfo) | Возвращает или устанавливает дату и время последнего доступа к заданному файлу или папке в формате всеобщего скоординированного времени (UTC). |
LastWriteTime (унаследовано от FileSystemInfo) | Возвращает или устанавливает время последней операции записи в текущий файл или папку. |
LastWriteTimeUtc (унаследовано от FileSystemInfo) | Возвращает или устанавливает время последней операции записи в текущий файл или папку в формате всеобщего скоординированного времени (UTC). |
Length | Возвращает размер текущего файла. |
Name | Возвращает имя файла. Переопределен. |
Открытые методы
AppendText | Создает объект StreamWriter, добавляющий текст в файл, описываемый этим экземпляром FileInfo. |
CopyTo | Перегружен. Копирование существующего файла в новый файл. |
Create | Создание файла. |
CreateObjRef (унаследовано от MarshalByRefObject) | Создает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для коммуникации с удаленными объектами. |
CreateText | Создание объекта StreamWriter, который записывает новый текстовый файл. |
Delete | Удаление файла без возможности восстановления. Переопределен. |
Equals (унаследовано от Object) | Перегружен. Определяет, равны ли два экземпляра Object. |
GetHashCode (унаследовано от Object) | Служит хеш-функцией для конкретного типа, пригоден для использования в алгоритмах хеширования и структурах данных, например в хеш-таблице. |
GetLifetimeService (унаследовано от MarshalByRefObject) | Извлекает служебный объект текущего срока действия, который управляет средствами срока действия данного экземпляра. |
GetObjectData (унаследовано от FileSystemInfo) | Устанавливает объект SerializationInfo с именем файла и дополнительными сведениями об исключении. |
GetType (унаследовано от Object) | Возвращает Type текущего экземпляра. |
InitializeLifetimeService (унаследовано от MarshalByRefObject) | Получает служебный объект срока действия, для управления средствами срока действия данного экземпляра. |
MoveTo | Перемещение заданного файла в новое положение с возможностью задания нового имени файла. |
Open | Открывается файл с различными правами доступа на чтение-запись и совместное использование. Перегружен. |
OpenRead | Создает разрешенный только для чтения FileStream. |
OpenText | Создает StreamReader с кодировкой UTF-8, который выполняет считывание из существующего текстового файла. |
OpenWrite | Создает разрешенный только для записи объект FileStream. |
Refresh (унаследовано от FileSystemInfo) | Обновление состояния объекта. |
ToString | Переопределен. Возвращает полный путь как строку. |
Пример .
using System;
using System.IO;
class Test
{
public static void Main ()
{
string path = @"c:\temp\MyTest.txt";
if ( !File.Exists (path) )
{
// Создать файл для записи и освободить ресурсы
// с помощью Dispose () после выхода из блока using
using (StreamWriter sw = File.CreateText (path))
{
sw.WriteLine ("Hello");
sw.WriteLine ("And");
sw.WriteLine ("Welcome");
}
}
// Открыть файл для чтения.
using (StreamReader sr = File.OpenText (path))
{
string s = "";
while ( (s = sr.ReadLine ()) != null)
{
Console.WriteLine (s);
}
}
try
{
string path2 = path + "temp";
// Путь к несуществующему файлу. Исключение не возбуждается.
File.Delete (path2);
// Копировать файл.
File.Copy (path, path2);
Console.WriteLine ("{0} был скопирован в {1}.", path, path2);
// Удалить только что созданный файл.
File.Delete (path2);
Console.WriteLine ("{0} был успешно удален.", path2);
}
catch (Exception e)
{
Console.WriteLine ("ОШИБКА: {0}", e);
}
}
}
Тот же пример без оператора using
using System;
using System.IO;
class Test
{
public static void Main ()
{
string path = @"c:\temp\MyTest.txt";
if (!File.Exists (path))
{
// Создать файл для записи
StreamWriter sw = File.CreateText (path);
sw.WriteLine ("Hello");
sw.WriteLine ("And");
sw.WriteLine ("Welcome");
sw.Close ();
}
// Open the file to read from.
StreamReader sr = File.OpenText (path);
string s = "";
while ( (s = sr.ReadLine ()) != null)
{
Console.WriteLine (s);
}
sr.Close ();
try
{
string path2 = path + "temp";
// Путь к несуществующему файлу.
File.Delete (path2);
// Копировать файл.
File.Copy (path, path2);
Console.WriteLine ("{0} был скопирован в {1}.", path, path2);
// Удалить только что созданный файл.
File.Delete (path2);
Console.WriteLine ("{0} был успешно удален.", path2);
}
catch (Exception e)
{
Console.WriteLine ("ОШИБКА: {0}", e);
}
}
}
Дата: 2019-02-02, просмотров: 352.