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

Содержание

Слайд 2

Основные понятия

Под файлом подразумевается именованная информация на внешнем носителе.
Логически файл можно

Основные понятия Под файлом подразумевается именованная информация на внешнем носителе. Логически файл
представить как конечное количество последовательных байтов.
Передача данных с внешнего устройства в оперативную память называется чтением, или вводом, обратный процесс – записью, или выводом.
Обмен данных реализуется с помощью потоков.
Поток (stream) –это абстрактное понятие, относящееся к любому переносу данных от источника к приемнику. Поток определяется как последовательность байтов и не зависит от конкретного устройства, с которым производится обмен.
Обмен с потоком для повышения скорости передачи производится через специальную область оперативной памяти – буфер.
При записи в файл вся информация сначала направляется в буфер и там накапливается, пока буфер не заполнится. После этого происходит передача данных на внешнее устройство.
При чтении из файла данные вначале считываются в буфер, что позволяет быстро и эффективно обмениваться информацией с внешними устройствами.

Слайд 3

Пространство имен System.IO

Обмен с внешними устройствами можно выполнять на уровне:
Двоичного представления данных

Пространство имен System.IO Обмен с внешними устройствами можно выполнять на уровне: Двоичного
(BinaryReader, BinaryWriter).
Байтов (FileStream).
Текста, то есть символов (StreamWriter, StreamReader).

Слайд 4

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

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

Слайд 5

Доступ к файлам

Последовательный – очередной элемент можно прочитать (записать) только после аналогичной

Доступ к файлам Последовательный – очередной элемент можно прочитать (записать) только после
операции с предыдущим элементом.

Произвольный (прямой) – выполняется чтение (запись) произвольного элемента по заданному адресу.

Использование классов файловых потоков предполагает следующие операции.
Создание потока и связывание его с физическим файлом.
Обмен (ввод-вывод).
Закрытие файла.

Режимы доступа к файлу в перечислении FileAccess

Режимы открытия файла в перечислении FileMode

Слайд 6

Потоки байтов. Класс FileStream

Потоки байтов. Класс FileStream

Слайд 7

namespace ConsoleApp1
{ class Program
{ static void Main(string[] args)
{
FileStream f

namespace ConsoleApp1 { class Program { static void Main(string[] args) { FileStream
= new FileStream("text.txt", FileMode.Create, FileAccess.ReadWrite);
f.WriteByte(100); // записывает число 100 в начало файла
byte[] x = new byte[10];
for (byte i=0;i<10;++i)
{
x[i] = (byte)(10 - i);
f.WriteByte(i); // записывает 10 чисел о 0 до 9
}
f.Write(x, 0, 5); // записывает первые 5 элементов массива
byte[] y = new byte[20];
f.Seek(0, SeekOrigin.Begin); //установка указателя на начало
f.Read(y, 0, 20); // чтение из файла в массив
foreach (byte elem in y) Console.Write(" " + elem);
Console.WriteLine();
f.Seek(5, SeekOrigin.Begin);//установка указателя на 5-й элемент
int a = f.ReadByte(); // чтение 5-го элемента
Console.WriteLine(a);
a = f.ReadByte(); // чтение 6-го элемента
Console.WriteLine(a);
Console.WriteLine("Текущая позиция в потоке "+f.Position);
f.Close();
} }}

Пример работы с потоком байтов

Слайд 8

Исключения

static void Main(string[] args)
{ try
{
FileStream f = new FileStream("text1.txt",

Исключения static void Main(string[] args) { try { FileStream f = new
FileMode.Open, FileAccess.ReadWrite);
f.Close();
}
catch (FileNotFoundException e)
{
Console.WriteLine(e.Message);
Console.WriteLine("Проверьте правильность имени файла");
return;
}
catch (Exception e)
{
Console.WriteLine("Error: "+ e.Message);
return;
}
}

Слайд 9

Потоки символов. StreamReader и StreamWriter

Потоки символов. StreamReader и StreamWriter

Слайд 10

Пример чтения из файла

string path= @"C:\SomeDir\hta.txt";            
try
{
    Console.WriteLine("***считываем весь файл***");
    using (StreamReader sr = new

Пример чтения из файла string path= @"C:\SomeDir\hta.txt"; try { Console.WriteLine("***считываем весь файл***");
StreamReader(path))
    {
        Console.WriteLine(sr.ReadToEnd());
    }            
}
catch (Exception e)
{
    Console.WriteLine(e.Message);
}

         
Console.WriteLine("******считываем блоками********");
    using (StreamReader sr = new StreamReader(path, System.Text.Encoding.Default))
    {
        char[] array = new char[4];
        // считываем 4 символа
        sr.Read(array, 0, 4);

 
Console.WriteLine("**считываем построчно**");
    using (StreamReader sr = new StreamReader(path, System.Text.Encoding.Default))
    {
        string line;
        while ((line = sr.ReadLine()) != null)
        {
            Console.WriteLine(line);
        }
    }

Слайд 11

Пример записи в текстовый файл

string readPath= @"C:\SomeDir\hta.txt";
string writePath = @"C:\SomeDir\ath.txt";
string text =

Пример записи в текстовый файл string readPath= @"C:\SomeDir\hta.txt"; string writePath = @"C:\SomeDir\ath.txt";
"";
try
{
    using (StreamReader sr = new StreamReader(readPath, System.Text.Encoding.Default))
    {
        text=sr.ReadToEnd();
    }
    using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding.Default))
    {
        sw.WriteLine(text);
    }
using (StreamWriter sw = new StreamWriter(writePath, true, System.Text.Encoding.Default))
    {
        sw.WriteLine("Дозапись");
        sw.Write(4.5);
    }
}
catch (Exception e)
{
    Console.WriteLine(e.Message);
}

Кодировка, в которой записывается файл.

true - новые данные добавляются в конце к уже имеющимся данным.
false, то файл перезаписывается

Слайд 12

Двоичные потоки. BinaryWriter и BinaryReader

Двоичные потоки. BinaryWriter и BinaryReader

Слайд 13

Пример формирования двоичного файла

class Program
{
static void Main(string[] args)
{

Пример формирования двоичного файла class Program { static void Main(string[] args) {
try
{
BinaryWriter f = new BinaryWriter(new FileStream(@"D:\Информационные технологии\states.txt", FileMode.Create));
double d = 0;
while (d<4)
{
f.Write(d);
d +=0.33;
}
f.Seek(16, SeekOrigin.Begin); // второй элемент файла
f.Write(888d);
f.Close();
}
catch (FileNotFoundException e)
{
Console.WriteLine(e.Message);
Console.WriteLine("Проверьте правильность имени файла");
return;
}
catch (Exception e)
{
Console.WriteLine("Error: "+ e.Message);
return;
} } }

Слайд 14

Пример чтения из двоичного файла

FileStream f=new FileStream(@"D:\Информационные технологии\states.txt", FileMode.Open);
BinaryReader fin = new

Пример чтения из двоичного файла FileStream f=new FileStream(@"D:\Информационные технологии\states.txt", FileMode.Open); BinaryReader fin
BinaryReader(f);
long n = f.Length /8; //количество чисел в файле
double[] x = new double[n];
long i = 0;
try
{
while (true) x[i++] = fin.ReadDouble();
}
catch (EndOfStreamException e) { }
foreach (double d in x) Console.Write(" " + d);
fin.Close();
f.Close();

Слайд 15

Работа с каталогами. Класс Directory и DirectoryInfo

Работа с каталогами. Класс Directory и DirectoryInfo

Слайд 16

Получение списка файлов и подкаталогов

string dirName = "C:\\";
if (Directory.Exists(dirName))
{
    Console.WriteLine("Подкаталоги:");
    string[] dirs = Directory.GetDirectories(dirName);
    foreach

Получение списка файлов и подкаталогов string dirName = "C:\\"; if (Directory.Exists(dirName)) {
(string s in dirs)
    {
        Console.WriteLine(s);
    }
    Console.WriteLine();
    Console.WriteLine("Файлы:");
    string[] files = Directory.GetFiles(dirName);
    foreach (string s in files)
    {
        Console.WriteLine(s);
    }
}

Создание каталога

string path = @"C:\SomeDir";
string subpath = @"program\avalon";
DirectoryInfo dirInfo = new DirectoryInfo(path);
if (!dirInfo.Exists)
{
    dirInfo.Create();
}
dirInfo.CreateSubdirectory(subpath);

Получение информации о каталоге

string dirName = "C:\\Program Files";
DirectoryInfo dirInfo = new DirectoryInfo(dirName);
Console.WriteLine("Название каталога: {0}", dirInfo.Name);
Console.WriteLine("Полное название каталога: {0}", dirInfo.FullName);
Console.WriteLine("Время создания каталога: {0}", dirInfo.CreationTime);
Console.WriteLine("Корневой каталог: {0}", dirInfo.Root);

Удаление каталога

string dirName = @"C:\SomeFolder“; 
try
{
    DirectoryInfo dirInfo = new DirectoryInfo(dirName);
    dirInfo.Delete(true);
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}

Перемещение каталога

string string oldPath = @"C:\SomeFolder";
string newPath = @"C:\SomeDir";
DirectoryInfo dirInfo = new DirectoryInfo(oldPath);
if (dirInfo.Exists && Directory.Exists(newPath) == false)
{
    dirInfo.MoveTo(newPath);
}

Слайд 17

Работа с файлами. Классы File и FileInfo

Работа с файлами. Классы File и FileInfo
Имя файла: Работа-с-файлами.pptx
Количество просмотров: 27
Количество скачиваний: 0