Лабораторная работа №5
.pdfFile.Create(path);
}
//Выставляем атрибут
File.SetAttributes(path, FileAttributes.ReadOnly); //Добавляем атрибут
File.SetAttributes(path, File.GetAttributes(path)|FileAttributes.Hidden);
//Логическое умножение -оставляем один атрибут Hidden для сравнения if((File.GetAttributes(path) & FileAttributes.Hidden) == FileAttributes.Hidden)
{
//Оставляем только для чтения и архивный
File.SetAttributes(path,FileAttributes.Archive | FileAttributes.ReadOnly);
}
}
GetCreationTime(string path); GetCreationTimeUtc(string path); GetLastAccessTime(string path); GetLastAccessTimeUtc(string path); GetLastWriteTime(string path); GetLastWriteTimeUtc(string path); SetCreationTime(string path); SetCreationTimeUtc(string path); SetLastAccessTime(string path); SetLastAccessTimeUtc(string path); SetLastWriteTime(string path); SetLastWriteTimeUtc(string path); методы для
установки и чтения временных параметров файлов. Методы устанавливают или
читают дату и время в формате DateTime, например:
DateTime datetime=File.GetCreationTime(path); Text=datetime.Date.ToString();
Класc Path и работа с файлами
Класс Path содержит набор статических методов, используемых для обработки имен файлов. Рассмотрим основные методы и свойства класса:
GetFileName(string path) - возвращает имя файла вместе с расширением, но без
пути:
private void button1_Click(object sender, System.EventArgs e)
{
//Создание пустой файла string path=@"C:\a.txt"; if(!File.Exists(path))
{
File.Create(path);
}
Text=Path.GetFileName(path);
В заглавии окна будет выведено "a.txt".
GetFileNameWithoutExtension(string path) - возвращает имя файла без расширения и
без пути. Следующая строка в коде примера выведет "a":
Text=Path.GetFileNameWithoutExtension(path);
GetExtension(string path) - возвращает расширение имени файла. Следующая строка в
коде примера выведет ".txt"
Text=Path.GetExtension(path);
GetFullPath(string path) - возвращает полное имя файла. Следующая строка в коде
примера выведет "C:\a.txt".
Text=Path.GetFullPath(path);
GetPathRoot(string path) - возвращает корневой каталог для заданного файла. Следующая строка в коде примера выведет "C:\".
Text=Path.GetPathRoot(path);
GetDirectoryName(string patch) - возвращает имя каталога для указанного файла.
Следующая строка в коде примера выведет "C:\".
Text=Path.GetDirectoryName(path);
GetTempFileName() - возвращает уникальное имя временного файла и создает файл нулевой длины с данным именем, например:
C:\DOCUME~1\root\LOCALS~1\Temp\tmpA.tmp
HasExtension(string path), IsPathRooted(string path) - методы проверки наличия расширения и корневого каталога соответственно в имени файла, например:
GetTempPath() - возвращает маршрут к каталогу Temp пользователя.
C:\DOCUME~1\root\LOCALS~1\Temp\
ChangeExtension(string, string) - этот метод используется для того, чтобы изменить расширение имени файла, и возвращает результат в виде строки с полным именем файла и новым расширением, например следующая строка в коде примера выведет C:\a.doc
richTextBox1.Text=Path.ChangeExtension(path, ".doc");
Combine(string patchdir, string pathfile) - метод объединяет два имени и возвращает результат в виде переменной типа string, например cледующие строки в коде примера дадут C:\1\b.txt:
string path=@"C:\"; string path1=@"1\b.txt";
richTextBox1.Text=Path.Combine(path,path1);
Класcы FileSystemInfo и FileInfo и работа с файлами
Класс FileInfo наследник абстрактного класса FileSystemInfo используется для создания, копирования, удаления, перемещения, и открытия файлов, и при использовании ряда методов создает объекты типа FileStream. Класcы FileSystemInfo содержит свойства и методы, общие для управления файлами и директориями. Перечислимих:
Attributes - свойство, которое может быть использовано для установки или получения атрибутов файла. Подробно значения атрибутов были рассмотрены выше.
Следующий код показывает основные возможности по работе с атрибутами:
private void button1_Click(object sender, System.EventArgs e)
{
string path = @"C:\a.txt";
//Создаем файл пока известным нам способом if(!File.Exists(path))
{
File.Create(path);
}
richTextBox1.Text="";
//Создаем экземпляр классаFileInfo для файла
FileInfo fileinfo = new FileInfo(path);
//Смотрим с какими атрибутами по умолчанию создан файл richTextBox1.Text+=fileinfo.Attributes.ToString()+"\r\t"; //Добавляем атрибутHidden fileinfo.Attributes=fileinfo.Attributes | FileAttributes.Hidden; richTextBox1.Text+=fileinfo.Attributes.ToString()+"\r\n";
//Если есть у файла атрибут Hidden
if((fileinfo.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden)
{
//Убираем все атрибуты
fileinfo.Attributes= fileinfo.Attributes & FileAttributes.Normal; richTextBox1.Text+=fileinfo.Attributes.ToString()+"\r\n";
}
Результат:
Archive Hidden, Archive Normal
Exists - свойство используется для проверки существования файла.
string path =@"C:\b.txt";
FileInfo fileinfo = new FileInfo(path); if(!fileinfo.Exists) Text="Файл не существует";
Delete() -метод позволяет удалить файл.
private void button1_Click(object sender, System.EventArgs e)
{
string path = @"C:\a.txt";
//Создаем файл пока известным нам способом using(FileStream filestream=File.Create(path)){} //Создаем экземпляр класса
FileInfo fileinfo = new FileInfo(path); if(fileinfo.Exists)
{
richTextBox1.Text+="Здесь файл существует \r\n";
}
fileinfo.Delete();
fileinfo= new FileInfo(path); if(!fileinfo.Exists)
{
richTextBox1.Text+="А здесь уже не существует";
}
}
Класс FileInfo добавляет дополнительные методы для работы с файлами:
Create() - метод используется для создания файла. Метод возвращает объект типа
FileStream;
private void button1_Click(object sender, System.EventArgs e)
{
string path = @"C:\a.txt";
FileInfo fileinfo = new FileInfo(path); using(FileStream filestream=fileinfo.Create()){}
}
Информацию в созданный файл можно записать аналогично, как это делалось выше с использованием FileStream. В приведенном ниже коде показано также как записать текст в русской кодировке c использованием System.Text.Encoding.Default.
private void button1_Click(object sender, System.EventArgs e)
{
string path= @"C:\a.txt";
FileInfo fileinfo = new FileInfo(path); using(FileStream filestream=fileinfo.Create())
{
string sString = "Текст, который будет записан в файл";
Byte[] bText = System.Text.Encoding.Default.GetBytes(sString);
int iByteCount = System.Text.Encoding.Default.GetByteCount(sString); filestream.Write(bText,0,iByteCount);
}
//Просмотрим записанный текст вTextBox System.IO.StreamReader streamReader; streamReader = new System.IO.StreamReader(path, System.Text.Encoding.Default);
textBox1.Text = streamReader.ReadToEnd(); streamReader.Close();
}
MoveTo(string pathdest) - метод используется для переименования или перемещения файла. Метод вызывает прерывание ввода вывода при отсутствии файла источника и при наличии файла адресата. Приведенный далее код выдаст
сообщение 1 при отсутствии файла "a.txt" и сообщение 2 при наличии файла "b.doc":
private void button1_Click(object sender, System.EventArgs e)
{
string path1 = @"C:\a.txt"; string path2= @"C:\b.doc";
FileInfo fileinfo = new FileInfo(path1); try
{
fileinfo.MoveTo(path2);
}
catch (IOException ex)
{
textBox1.Text="Ошибка переноса файла "+ex.Message;
}
catch (Exception ex)
{
textBox1.Text=ex.ToString();
}
}
Сообщения: //Сообщение 1
Ошибка переноса файла: Unable to find the specified file.
//Сообщение 2 Ошибка переноса файла: Невозможно создать файл, так как он уже существует.
CopyTo(string pathdest), или CopyTo(string pathdest, Boolean rewrite) - используются для копирования существующего файла в новый файл. Метод вызывает прерывание ввода вывода (в приведенном ниже коде) при отсутствии файла источника (сообщение 1) и при наличии файла адресата и переменной rewrite=false или при использовании функции с одним параметром (сообщение 2)
и не вызывает прерывания при rewrite=true.
private void button1_Click(object sender, System.EventArgs e)
{
string path1 = @"C:\a.txt"; string path2 = @"C:\b.doc";
FileInfo fileinfo = new FileInfo(path1); try
{
fileinfo.CopyTo(path2,true);
}
catch(IOException ex)
{
textBox1.Text="Ошибка копирования файла "+ex.Message;
}
catch (Exception ex)
{
textBox1.Text=ex.ToString();}}
Сообщения: //Сообщение 1
Ошибка копирования файлаCould not find file "C:\a.txt". //Сообщение2
Ошибка копирования файлаThe file "C:\b.doc" already exists.
Open(FileMode mode); Open(FileMode mode,FileAccess acces);
Open(FileMode mode,FileAccess acces,FileShare share); - методы открывают файл и
возвращают объект типа FileStream;
private void button1_Click(object sender, System.EventArgs e)
{
string path = @"C:\a.txt";
FileInfo fileinfo = new FileInfo(path);
FileStream filestream1,filestream;
using(filestream=fileinfo.Open(FileMode.OpenOrCreate,FileAccess.Read,Fi
leShare.Read))
{
try
{
using(filestream1=fileinfo.Open(FileMode.OpenOrCreate,FileAccess.Read,
FileShare.Read)){}
textBox1.Text="Файл открыт дважды приFileShare.Share";
}
catch (IOException ex)
{
textBox1.Text="Файл не может быть открыт дважды при
FileShare.None";
}
catch (Exception ex)
{
textBox1.Text=e.ToString();
}
}
}
В данном примере показано, что если установить FileShare.None, то файл нельзя будет открыть для совместного использования. При других значениях можно. Далее с файлом можно работать - писать, читать... аналогично, как это делали в примере для метода Create.
OpenRead(FileMode mode,FileAccess acces,FileShare share), OpenWrite(FileMode mode,FileAccess acces,FileShare share) - методы позволяют создавать объекта
FileStream с доступом к файлу только для чтения, и с доступом к файлу как для чтения, так и для записи. Методы аналогичны методу Open и так же как и у него функция перегружаемая и может иметь один, два и три аргумента.
CreateText() -метод создает новый пустой файл и объект типа S treamWriter, который может быть использован для записи в созданный текстовый файл новой информации. Файл создается заново, если файл и существует. Исключение возникает если диск
закрыт для записи.
private void button1_Click(object sender, System.EventArgs e)
{
string path = @"C:\a.txt";
FileInfo fileinfo = new FileInfo(path);
using (StreamWriter streamwriter = fileinfo.CreateText())
{
streamwriter.WriteLine("Строка 1"); streamwriter.WriteLine("Строка 2"); streamwriter.WriteLine("Строка 3");
}
}
OpenText() - метод открывает текстовый файл для чтения и создает объект StreamReader с кодировкой UTF8, который можно использовать для чтения из существующего файла. Прерывание вызывается, как и во всех методах открытия файла, только при отсутствии открываемого файла или отсутствии доступа к файлу. Дополнив предыдущий фрагмент кода следующими строками мы выведем текст,
который был введен в созданный файл, в контрол TextBox.
using(StreamReader streamreader = fileinfo.OpenText())
{
string sText = "";
while((sText = streamreader.ReadLine()) != null)
{
textBox1.Text+=sText+"\r\n";
}
}
AppendText() -метод открывает текстовый файл для добавления строк и создает объект StreamWriter с кодировкой UTF8, который используется для добавления строк. Прерывание вызывается, как и во всех методах открытия файла. Пример
использования:
private void button1_Click(object sender, System.EventArgs e)
{
string path = @"C:\a.txt";
FileInfo fileinfo = new FileInfo(path); using(StreamWriter streamwriter = fileinfo.AppendText())
{
streamwriter.WriteLine("Строка 4"); streamwriter.WriteLine("Строка 5"); streamwriter.WriteLine("Строка 6");
}
}
Свойства Directory, DirectoryName, Length - свойства возвращает объект, содержащий информацию о родительском каталоге, полный маршрут к файлу и размер текущего файла (типа Long).
4.Содержание отчёта
Отчёт должен содержать название и цель. Ход работы с комментариями и выполненное задания из ПРИЛОЖЕНИЕ А. Выводы.
ПРИЛОЖЕНИЕ А
1.Создайте форму Рис. 5.7.
2.Организуйте работу программы, согласно форме.
3.В информации о файле должны быть атрибуты файла, название, дата создания, путь к файлу.
4.Добавьте к существующей программе следующий функционал согласно варианту:
Вариант |
Задание |
1 |
Копирование файла в указанную директорию |
2 |
Перемещение файла в указанную директорию |
3 |
Изменение расширения указанного файла |
4 |
Переименование указанного файла |
5 |
Копирование контента файла в новый указанный файл |
6 |
Копирование файла в две указанные директории |
7 |
Создание директории и перемещение в нее указанного файла |
8 |
Создание копии файла в том же каталоге |
9 |
Переименование указанного файла с изменением расширения |
10 |
Копирование контента файла в новый указанный файл с последующим удалением |
11 |
Копирование файла в указанные три директории одновременно |
12 |
Копирование файла с последующим удалением “родителя” |
13 |
Создание пяти клонов одного указанного файла с разными расширениями |
14 |
Переименование указанного файла в имя взятое из контента другого файла |
15 |
Копирование каталога файлов в новый указанный каталог |
16 |
Изменение атрибутов указанного файла |
17 |
Удаление файлов из указанного каталога |
18 |
Перемещение файла в указанную директорию |
19 |
Изменение расширения файлов в указанном каталоге |
20 |
Изменение атрибутов фалов указанного каталога |
