Язык программирования C# 6.0 модуль 10
Работа с файлами и каталогами
Потоки байтов
Потоки символов
Работа с архивами
Сериализация в .Net
Практика
332.00K
Category: programmingprogramming

Язык программирования C# 6.0. Модуль 10

1. Язык программирования C# 6.0 модуль 10

www.specialist.ru

2. Работа с файлами и каталогами

File - статические методы для создания, копирования,
удаления и перемещения файлов.
FileInfo - методы экземпляра для создания,
копирования, удаления и перемещения файлов.
Directory - статические методы для создания,
перемещения и перечисления файлов в каталогах.
DirectoryInfo - методы экземпляра для создания,
перемещения и перечисления файлов в каталогах.
Path - методы и свойства для обработки имён
каталогов кроссплатформенным способом.
www.specialist.ru
2

3.

Добавление текста в файл:
string path = @"C:\Users\student\books.txt";
if (File.Exists(path))
File.AppendAllText(path, “some text \r\n new line");
Поиск по дереву каталогов:
string path = @"C:\Users\student\Desktop";
string[] books = Directory.GetFiles(path, "*.pdf",
SearchOption.AllDirectories);
foreach (string s in books)
Console.WriteLine(s);
www.specialist.ru
3

4. Потоки байтов

FileStream — для чтения и записи в файл.
MemoryStream — для чтения и записи в память.
BufferedStream — для повышения быстродействия
операций чтения и записи.
NetworkStream — для чтения и записи на сетевые
сокеты.
PipeStream — для чтения и записи в анонимные и
именованные каналы.
CryptoStream — для связи потоков данных с
криптографическими алгоритмами.
www.specialist.ru
4

5.

Чтение байтов из файла:
string path = @"C:\Users\student\books.txt";
FileStream fs = File.OpenRead(path);
// FileStream fs = new FileStream(path, FileMode.Open,
FileAccess.Read);
int ch;
while( (ch = fs.ReadByte()) != -1)
Console.Write(char.ConvertFromUtf32(ch));
fs.Close();
// вызывает Dispose(true)
fs.Dispose();
// рекомендуется вызывать именно его
www.specialist.ru
5

6. Потоки символов

BinaryReader и BinaryWriter - для чтения и записи
простых типов данных, например: double.
TextReader и TextWriter - абстрактные базовые
классы. Их наследники:
• StreamReader и StreamWriter - для чтения и
записи текстов с учётом кодировки символов.
• StringReader и StringWriter - для чтения и записи
символов в строки или из строк.
www.specialist.ru
6

7.

Чтение текстового файла:
string line;
StreamReader tr = null;
string path = @"C:\Users\student\books.txt";
try
{
tr = new StreamReader(path, Encoding.GetEncoding(1251));
while ((line = tr.ReadLine()) != null)
Console.WriteLine(line);
}
finally {
if (tr!=null)
tr.Dispose();
}
www.specialist.ru
7

8.

Чтение текстового файла (вариант с using):
string line;
string path = @"C:\Users\student\books.txt";
using (StreamReader tr = new StreamReader(path,
Encoding.GetEncoding(1251) ))
{
while ((line = tr.ReadLine()) != null)
Console.WriteLine(line);
}
www.specialist.ru
8

9. Работа с архивами

ZipArchive — набор сжатых файлов в формате ZIP.
ZipArchiveEntry — сжатый файла в архиве.
ZipFile — статические методы для работы с архивом.
ZipFileExtensions — расширяющие методы для работы с
архивом.
DeflateStream — для сжатия и распаковки потоков с
помощью алгоритма Deflate.
GZipStream — для сжатия и распаковки потоков в формате
gzip.
www.specialist.ru
9

10.

Извлечение всех файлов из архива ZIP:
string zipPath = @"C:\Users\student\Desktop\java.zip";
string extractPath = @"C:\Users\student\Desktop";
using (ZipArchive archive =
ZipFile.Open(zipPath, ZipArchiveMode.Read))
{
archive.ExtractToDirectory(extractPath);
}
www.specialist.ru
10

11. Сериализация в .Net

Разрешена для коллекций и многих встроенных
типов.
Для пользовательских типов надо дать разрешение:
[Serializable()]
class Star { }
Можно исключить часть членов объекта из
сериализации:
[Serializable()]
class Star {
[field: NonSerialized()] int count;
}
Выбрать формат данных: BinaryFormatter или
SoapFormatter (XML)
www.specialist.ru
11

12.

Сохранение данных объекта в двоичном формате:
Star star = new Star();
Stream stream = File.Create(“star.bin”);
BinaryFormatter serializer = new BinaryFormatter
();
serializer.Serialize(stream, star);
stream.Dispose();
Чтение
Stream stream = File.OpenRead
(“star.bin”);
BinaryFormatter serializer = new BinaryFormatter
();
Star star =
(Star)serializer.Deserialize(stream);
stream.Dispose();
www.specialist.ru
12

13.

А если хотим изменить, то как происходит
сохранение?
[Serializable]
public class Star : ISerializable {
public Star() { }
int
mass;
public void GetObjectData ( SerializationInfo info,
StreamingContext context)
{
info.AddValue(“mass", mass, typeof(int));
}
public Star (SerializationInfo info, StreamingContext context)
{
mass= (int) info.GetValue(“mass", typeof(int));
}
}
www.specialist.ru
13

14. Практика

Откройте консольное приложение Lab10.
Добавьте код, в метод Main, необходимый для
сериализации объекта Books в XML формате.
Запустите программу и убедитесь в наличие
сохранённых данных объекта Books.
Выполните десериализацию.
www.specialist.ru
14
English     Русский Rules