Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа №5

.pdf
Скачиваний:
41
Добавлен:
26.03.2015
Размер:
668.31 Кб
Скачать

File.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

Изменение атрибутов фалов указанного каталога