Разделы презентаций


Работа с файлами

Содержание

Для работы с файлами и папками в пространстве имен System.IO существуют следующие классы:Directory – содержит статические методы для выполнения различных операций с папками (создание, удаление, проверка существования и т. п.).

Слайды и текст этой презентации

Слайд 117. Работа с файлами.
Цель любой программы состоит в обработке информации.

При этом классическим способом хранения информации является файлы. Файл всегда

должен имя, файл может иметь потенциально неограниченный, но всегда конечный размер. 
Файл можно создать, при этом если создается файл с существующим названием, то старый файл будет уничтожен (точнее очищен).
Существующий файл можно открыть. Открыть файл можно для чтения, записи или для чтения и записи.
Каждый открытый файл имеет текущий указатель. Этот указатель определяет, какая часть файла будет прочитана следующей операцией чтения или в какую часть будет записаны данные операцией записи.
Для работы (чтение и запись) с потоками, файлами и файловой системой предназначено пространство имен System.IO.


17. Работа с файлами.	Цель любой программы состоит в обработке информации. При этом классическим способом хранения информации является

Слайд 2 Для работы с файлами и папками в пространстве имен

System.IO существуют следующие классы:
Directory – содержит статические методы для выполнения

различных операций с папками (создание, удаление, проверка существования и т. п.).
DirectoryInfo – аналогичен классу Directory, только его методы не статические – для использования этого класса надо создать его экземпляр (параметром для конструктора служит имя папки).
File – содержит статические методы для выполнения различных операций с файлами (создание, удаление, копирование и т. п.).
FileInfo – аналогичен классу File, только его методы не статические – для использования этого класса надо создать его экземпляр (параметром для конструктора служит имя файла).


17.1 Классы для работы с папками и файлами

Для работы с файлами и папками в пространстве имен System.IO существуют следующие классы:Directory – содержит статические

Слайд 3 Этот класс содержит статические методы для работы с папками

(в отличие от класса DirectoryInfo, который содержит аналогичные методы, применяемые

для экзампляра класса)
Основные методы класса Directory:
CreateDirectory – создает папку с указанным именем.
Exists – проверяет существование папки с указанным именем.
Delete – удаляет папку с указанным именем.
Move – перемещает или переименовывает папку с указанным именем.


17.1.1 Класс Directory

Этот класс содержит статические методы для работы с папками (в отличие от класса DirectoryInfo, который содержит

Слайд 4 Пример: Создадим приложение, позволяющее создавать, удалять, переименовывать папки,

а также определять их наличие.
Вначале создадим пустую папку «D:\test»

Пример: Создадим приложение, позволяющее создавать, удалять, переименовывать папки, а также определять их наличие.Вначале создадим пустую

Слайд 5 Реализуем приложение с компонентами button1..button4 и textbox1..textbox5 и label1.

Для подключения

пространства имен System.IO добавим в описание соответствующую строку:

using System;
using System.Collections.Generic;
...
//Подключаем

необходимое пространство имен.
using System.IO;

Подключение System.IO

Реализуем приложение с компонентами button1..button4 и textbox1..textbox5 и label1.Для подключения пространства имен System.IO добавим в описание соответствующую

Слайд 6 На событие Click компонента button1 будем создавать папку с именем

из textBox1 в папке «D:\test»:
private void button1_Click(object sender, EventArgs e)
{

Directory.CreateDirectory("D:\\test\\"+textBox1.Text);
}


На событие Click компонента button1 будем создавать папку с именем из textBox1 в папке «D:\test»:private void button1_Click(object

Слайд 7 На событие Click компонента button2 будем проверять наличие папки с

именем из textBox2 в папке «D:\test»:

private void button2_Click(object sender, EventArgs

e)
{
if (Directory.Exists("D:\\test\\" + textBox2.Text)==true)
{ label1.Text = "Существует"; }
else { label1.Text = "Не существует"; };
}


На событие Click компонента button2 будем проверять наличие папки с именем из textBox2 в папке «D:\test»:private void

Слайд 8 На событие Click компонента button3 папке с именем из textBox3

в папке «D:\test» дадим имя из textBox4:

private void button3_Click(object sender,

EventArgs e)
{
if (Directory.Exists("D:\\test\\”+textBox3.Text) == true)
Directory.Move("D:\\test\\" + textBox3.Text,
"D:\\test\\" + textBox4.Text);
}


На событие Click компонента button3 папке с именем из textBox3 в папке «D:\test» дадим имя из textBox4:private

Слайд 9 На событие Click компонента button3 папке с именем из textBox3

в папке «D:\test» дадим имя из textBox4:

private void button4_Click(object sender,

EventArgs e)
{
Directory.Delete("D:\\test\\" + textBox5.Text);
}


На событие Click компонента button3 папке с именем из textBox3 в папке «D:\test» дадим имя из textBox4:private

Слайд 10
Почему?

Почему?

Слайд 11 Класс File предназначен для работа с файлами. Он содержит

статические методы, которые позволяют создавать, удалять, переименовывать и выполнять другие

операции с файлами.
Основные методы класса File:
Create – создание файла.
Exists – проверка существования файла.
Delete – удалениие файла.
Move – переименование и перемещение файла.
Copy – копирование файла.


17.1.2 Класс File

Класс File предназначен для работа с файлами. Он содержит статические методы, которые позволяют создавать, удалять, переименовывать

Слайд 12 Пример: Применение методов класса File:

// Создаем файл. File.Create("C:\\0.txt");
// Проверка

существования файла. if(File.Exists("C:\\1.txt"))    {       // Удаление файла.       File.Delete("C:\\1.txt");    }
// Переименование файла

a.txt в b.txt. File.Move("C:\\a.txt", "C:\\b.txt");
// Перемещение файла. File.Move("C:\\c.txt", "D:\\c.txt");
// Копирование файла. File.Copy("D:\\z.txt", "D:\\x.txt");


Задание:
Реализуйте программу, аналогичную примеру из параграфа 17.1.1, но работающую с файлами.

Пример: Применение методов класса File:// Создаем файл. File.Create(

Слайд 13 Класс FileSystemInfo является предком для классов DirectoryInfo

и FileInfo. Поэтому все его элементы присутствуют ив данных классах.

Основные свойства и методы класса FileSystemInfo (все они применимы как к файлам, так и к папкам):
Delete – метод для удаления.
CreationTime – читает или задает время создания.
LastAccessTime – читает или задает время последнего доступа.
LastWriteTime – читает или задает время последней записи.
Attributes – читает или задает атрибуты (скрытый, сжатый, системный, временный, только для чтения и др.). Один из атрибутов (а именно Directory) позволяет выяснить, не является ли объект папкой.
FullName – читает полное имя (диск, папки, подпапки и т. д.).
Name – имя файла или папки.
Extension – расширение.
Exists – существование файла или папки.


17.1.3 Класс FileSystemInfo

Класс FileSystemInfo является предком для классов DirectoryInfo и FileInfo. Поэтому все его элементы присутствуют

Слайд 14 Класс DirectoryInfo предназначен для работы с

папками. Кроме стандартных операций – перемещение, удаление, создание папок и

т.п. методы этого класса позволяют получить все подкаталоги и файлы указанной папки.
В отличие от класса Directory, методы класса DirectoryInfo – это методы экземпляра (т. е. они не статические).


Пример работы с классом:
//Создание объекта. DirectoryInfo di = new DirectoryInfo("c:\\tmp\\tmp2");
// Создаем папку.      di.Create();


17.1.4 Класс  DirectoryInfo

Класс DirectoryInfo предназначен для работы с папками. Кроме стандартных операций – перемещение, удаление,

Слайд 15// Вывод информации о папке.      String s = "";      s

+= "Full nane: " + di.FullName + "\n";      s +=

"Root: " + di.Root + "\n";      s += "Name: " + di.Name;      MessageBox.Show(s);

// Создание подпапок.
di.CreateSubdirectory("subdir1");
di.CreateSubdirectory("subdir2");

// Получение имен всех подпапок.
DirectoryInfo[] ds = di.GetDirectories();
s = "Вложенные папки:\n";
foreach (DirectoryInfo d in ds)
{ s+=d.Name+" \n"; }
MessageBox.Show(s);

// Удаление папки и всех подпапок.
di.Delete(true);


TRUE – УДАЛЯЮТСЯ И ПОДПАПКИ

// Вывод информации о папке.      String s =

Слайд 16 С помощью множества FileAttributes задаются атрибуты для

файлов и папок.
Наиболее важные значения этого

множества:
Directory – определяет, не есть ли объект папка.
Hidden – определяет, не является ли объект (папка или файл) скрытым.
ReadOnly – определяет, не имеет ли файл атрибут “только для чтения”.
Normal – определяет, что для файла не установлены любые другие атрибуты. Данный элемент множества не может комбинироваться с другими элементами этого множества.
System – определяет, не является ли файл системным.
Archive – определяет, не является ли файл архивным.
Compressed – определяет, не является ли файл сжатым файлом.


17.1.5 Множество FileAttributes

С помощью множества FileAttributes задаются атрибуты для файлов и папок.   Наиболее важные

Слайд 17 Пример:
// Создание объекта DirectoryInfo.
DirectoryInfo di

= new DirectoryInfo("d:\\tmp\\tmp2");

// Присваиваем атрибут "Только для чтения".

di.Attributes |= FileAttributes.Hidden;

// Получаем атриубты файла.
FileAttributes fa = di.Attributes;

// Выясняем, есть ли у папки атрибут Hidden.
if ((fa & FileAttributes.Hidden) == FileAttributes.Hidden)
{ label1.Text="Hidden";}

// Выясняем, есть ли у папки атрибут ReadOnly.
if ((fa & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
{ label2.Text="ReadOnly";}


Пример:// Создание объекта DirectoryInfo.   DirectoryInfo di = new DirectoryInfo(

Слайд 18 Класс FileInfo представляет из себя файл, находящийся

на жестком диске. С помощью этого класса можно производить стандарные

операции с файлом, а также получить значения характеристик файла (время последнего доступа, размер и др.) и атрибуты файла (скрытый, системный и др.).
Пример работы с файлом:
// Читаем информацию о файле.
FileInfo fi = new FileInfo(@"C:\tmp\1.txt");
FileInfo fi = new FileInfo("C:\\tmp\\1.txt");
// Выводим информацию о файле.
string s = "";
// Полное имя.
s += fi.FullName + "\n";
// Только имя файла.
s += fi.Name + "\n";
// Полный путь без имени файла.
s += fi.DirectoryName + "\n";
MessageBox.Show(s);


17.1.6 Класс FileInfo

Класс FileInfo представляет из себя файл, находящийся на жестком диске. С помощью этого класса

Слайд 19
// Создаем новый файл.
fi = new FileInfo(@"C:\tmp\2.txt");

FileStream fs = fi.Create();
// Закрываем поток, связанный с

файлом.
fs.Close();

// Показываем время создания.
MessageBox.Show("Creation {0} "+ fi.CreationTime);

// Проверяем, существует ли файл.
if (fi.Exists)
{
// Удаляем файл.
fi.Delete();
}


// Создаем новый файл.   fi = new FileInfo(@

Слайд 20 Все операции с файлами выполняются в программах С# с помощью

так называемых потоков данных (data stream).
Программы могут выполнять над

потоками данных 3 операции:
• запись данных в поток,
• чтение данных из потока,
• позиционирование.

Программа С# может работать с потоками нескольких типов:
• стандартными потоками ввода и вывода,
• потоками, связанными с локальными файлами,
• потоками, связанными с файлами в оперативной памяти.


17.2 Потоки данных

Все операции с файлами выполняются в программах С# с помощью так называемых потоков данных (data stream). Программы

Слайд 21 Для потоков, связанных с файлами, определено

также такое понятие, как текущая позиция внутри файла.

Перед началом операций ввода-вывода программа должна открыть поток. При этом текущая позиция устанавливается на начало файла. При чтении файла или записи в файл блоков данных текущая позиция сдвигается к концу файла на количество байтов, равное размеру прочитанного или записанного блока данных. При помощи средств позиционирования программа может установить текущую позицию в произвольное место файла. Когда работа с файлом закончена, программа обязательно должна закрыть соответствующий поток явным образом.
Если вам нужно создать входной или выходной поток, связанный с локальным файлом, содержащим двоичные данные, следует воспользоваться классами BinaryWriter и BinaryReader.
Для чтения из файла или записи в файл текстовых данных обычно используются классы StreamReader и StreamWriter.


17.2.1 Потоки, связанные с файлами

Для потоков, связанных с файлами, определено также такое понятие, как текущая позиция внутри

Слайд 22
Для работы с

двоичными файлами вначале следует создать поток класса Filestream, воспользовавшись соответствующим

конструктором, например:
FileStream fs =
new FileStream("myfile.dat", FileMode.CreateNew);
В качестве первого параметра конструктору необходимо передать полный путь к файлу или имя файла, а в качестве второго — режим открытия потока.
Виды режимов:
Append – если файл существует, он открывается. Текущая позиция устанавливается на конец файла. Если указанного файла нет, то он создается. Этот режим можно использовать только совместно с режимом доступа FileAccess.Write.
Create – ОС должна создать новый файл. Если указанный файл уже существует, он будет перезаписан.
Open – Требуется открыть существующий файл. Указатель ставится на начало файла.
Truncate – Требуется открыть существующий файл. После открытия файл обрезается до нулевой длины.


17.2.2 Работа с двоичными файлами

Для работы с двоичными файлами вначале следует создать поток класса Filestream,

Слайд 23 В классе FileStream существует конструктор, позволяющий определить

не только путь к файлу, но и режим его открытия:

FileStream

fs = new FileStream(name, FileMode.Open, FileAccess.Read);

Режим доступа задается как статическая константа класса FileAccess.
Read Доступ только на чтение
ReadWrite Доступ на чтение и запись
Write Доступ на запись



В классе FileStream существует конструктор, позволяющий определить не только путь к файлу, но и

Слайд 24 После создания потока на базе файла (FileStream)

следует на базе этого потока создать потоки классов BinaryWriter и

BinaryReader, предназначенные соответственно для записи в файл и чтения из файла двоичных данных:
BinaryWriter bw = new BinaryWriter(fs);
BinaryReader br = new BinaryReader(fs);

После того как программа завершила работу с потоками, она должна их закрыть. Для закрытия потоков используется метод Close.
Закрываются потоки в порядке, обратном открытию:

FileStream fs = new FileStream("myfile.dat", FileMode.CreateNew); BinaryWriter bw = new BinaryWriter(fs); BinaryReader br = new BinaryReader(fs);

// Работа с потоками

bw.Close();
br.Close();
fs.Closet);


После создания потока на базе файла (FileStream) следует на базе этого потока создать потоки

Слайд 25 Для записи в файл двоичных данных используется

метод Write:
Write();
При этом параметр должен иметь один из стандартных

типов данных (bool, byte , int, long, double, float, char, string и др.).
Параметром может быть массив целых чисел или символов:
Write(byte[]);
Write(char[]);
Можно записать только часть массива:
Write(byte[], , );
Write(char[], , );
где и целые числа, указывающие с какого индекса начать и сколько элементов записать.
При записи в двоичный поток текстовой строки string она будет предваряться префиксом, содержащим значение длины строки. Строка будет записана в кодировке ASCII.

Чтобы прочитать данные из потока BinaryReader, нужно использовать один из методов, специально предусмотренных для этого в классе BinaryReader. Например: ReadByte(), ReadChar(), ReadDouble() и т.п.


Для записи в файл двоичных данных используется метод Write:	Write(); При этом параметр должен иметь

Слайд 26 Для записи в файл двоичных данных используется

метод Write:
Write();
При этом параметр должен иметь один из стандартных

типов данных (bool, byte , int, long, double, float, char, string и др.).
Параметром может быть массив целых чисел или символов:
Write(byte[]);
Write(char[]);
Можно записать только часть массива:
Write(byte[], , );
Write(char[], , );
где и целые числа, указывающие с какого индекса начать и сколько элементов записать.
При записи в двоичный поток текстовой строки string она будет предваряться префиксом, содержащим значение длины строки. Строка будет записана в кодировке ASCII.

Чтобы прочитать данные из потока BinaryReader, нужно использовать один из методов, специально предусмотренных для этого в классе BinaryReader. Например: ReadByte(), ReadChar(), ReadDouble() и т.п.


Для записи в файл двоичных данных используется метод Write:	Write(); При этом параметр должен иметь

Слайд 27 Пример: создание двоичного файла, запись и чтение данных

string

testFile = @"d:\MyData.dat";
if(File.Exists(testFile))
{
MessageBox.Show("Файл " + testFile + "

уже существует" );
return;
}

// Создание файла и запись чисел
FileStream fs = new FileStream(testFile, FileMode.Create);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write("Text string \n");
for(int i = 0; i < 10; i++)
{
bw.Write(i);
}
bw.Close();
fs.Close();


Пример: создание двоичного файла, запись и чтение данныхstring testFile = @

Слайд 28// чтение из файла
fs = new FileStream(testFile, FileMode.Open,

FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
string s = br.ReadString();
int k;
for (int i=0; i < 10; i++)
{
k = br.ReadInt32();
s += k.ToString() + "\n";
};
br.Close();
fs.Close();

MessageBox.Show("Содержимое файла " + testFile + "\n" + s );


// чтение из файлаfs = new FileStream(testFile, FileMode.Open,

Слайд 29
В принципе, потоки

FileStream, BinaryWriter и BinaryReader можно использовать для записи в файлы

и чтения из файлов текстовых строк, однако, лучше применять специально предназначенные для этого потоки классов StreamWriter и StreamReader. Эти потоки чрезвычайно просты в использовании и удобны для работы с текстовыми файлами.
Приемы использования потоков StreamWriter и StreamReader рассмотрим на примере записи в файл и чтения из него набора строк:

private void button2_Click(object sender, EventArgs e)
{
string testFile = @"d:\MyData.txt";
if (File.Exists(testFile))
{
MessageBox.Show("Файл " + testFile + " уже существует");
return;
}


17.2.3 Работа текстовыми файлами

В принципе, потоки FileStream, BinaryWriter и BinaryReader можно использовать для записи

Слайд 30StreamWriter sw = File.CreateText(testFile);
sw.Write("Строка 1\n");
sw.WriteLine("Строка 2");
sw.WriteLine("0 1 2 3 4

5 6 7 8 9");
sw.Close();


string s = "";
StreamReader sr =

File.OpenText(testFile);
while (true)
{
string str = sr.ReadLine();
if (str == null) break;
s += str+"\n";
}
sr.Close();

MessageBox.Show("Содержимое файла "
+ testFile + "\n" + s);


StreamWriter sw = File.CreateText(testFile);sw.Write(

Слайд 31 Если открыть наш файл в блокноте, то

получится следующее:







Первая и вторая строка записаны слитно!
Это вызвано разным способом

завершения их записи в файл:
sw.Write("Строка 1\n");
sw.WriteLine("Строка 2");
Если просмотреть файл в шестнадцатеричном виде (т.е. побайтно),





то видно, что «строка 1» завершается байтом 0A, а «строка 2» - двумя байтами OD и 0A, что более верно.


Если открыть наш файл в блокноте, то получится следующее:Первая и вторая строка записаны слитно!Это

Слайд 32





Непонятна также и запись текста

этих строк. Проблема в том, что существуют различные кодировки (способы

записи) символов с помощью байт. Во всех кодировках латинские символы (a, s, d, f, …), цифры (0, 1, …, 9) и знаки (+, -, *, …) записываются одинаковыми байтами, а для национальных алфавитов это правило не соблюдается. Поэтому русский текст, записанный в одной кодировке, скорее всего окажется нечитаемым в другой кодировке.

Кодировка символов задается в конструкторе, создающем выходной поток данных. Например, при создании потока текстовых строк StreamWriter мы можем указать в третьем параметре конструктора нужную нам кодировку:
StreamWriter sw = new StreamWriter(testFile, false, System.Text.Encoding.UNICODE);


Непонятна также и запись текста этих строк. Проблема в том, что существуют

Слайд 33 Кодировка указывается как статическое свойство класса System.Text.Encoding.


Возможные варианты кодировки:

ASCII Кодировка ASCII без символов кириллицы, в которой для

представления текстовых символов используются младшие 7 бит байта
Unicode Кодировка UNICODE. Для представления символов используется 16 бит (т. е. 2 байта)

UTF7 Применяется для представления символов UNICODE. В ней используются младшие 7 бит данных

UTF8 То же, но для представления символов UNICODE в ней используется 8 бит данных

Default Системная кодировка ANSI (не путать с кодировкой ASCII). В этой кодировке для представления каждого символа используется 8 бит данных



Кодировка указывается как статическое свойство класса  System.Text.Encoding. Возможные варианты кодировки:ASCII	Кодировка ASCII без символов

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика