Файловий і потоковий ввід-висновок

Файловий і потоковий ввід-висновок відносяться до передачі даних з носія інформації або на нього. У платформі .NET Framework простору імен System.IO містять типи, які забезпечують як синхронні, так і асинхронні операції читання і запису для потоків і файлів даних. Крім того, ці простори імен містять типи, які виконують стиснення і розпаковування файлів, а також типи, які забезпечують взаємодію через канали і послідовні порти.

Файл - це впорядкована і іменована послідовність байтів, що має постійне сховище. При роботі з файлами здійснюється за допомогою шляху до каталогів, що запам'ятовують пристрої, а також імена файлів і каталогів. На відміну від файлу, потік - це послідовність байтів, яку можна використовувати для запису або читання з допоміжного пристрою, що запам'ятовує, що є одним з пристроїв зберігання інформації (наприклад, дисків або пам'яті). Є кілька видів запам'ятовуючих пристроїв, відмінних від дисків, і існує кілька видів потоків, крім файлових потоків, наприклад мережеві потоки, потоки пам'яті і потоки каналів.

Типи в просторі імен System.IO можна використовувати для взаємодії з файлами і каталогами. Наприклад, можна отримувати і здавати властивості файлів і каталогів, а також отримувати колекції файлів і каталогів на основі критерію пошуку.

Нижче перераховані деякі часто використовувані класи для файлів і каталогів:

File надає статичні методи для створення, копіювання, видалення, переміщення і відкриття файлів, а також допомагає створити об'єкт FileStream.

FileInfo надає методи екземпляра для створення, копіювання, видалення, переміщення і відкриття файлів, а також допомагає створити об'єкт FileStream.

Directory надає статичні методи для створення, переміщення і перерахування в каталогах і підкаталогах.

DirectoryInfo надає методи екземпляра для створення, переміщення і перерахування в каталогах і підкаталогах.

Path надає методи і властивості для обробки рядків каталогів міжплатформним способом.

Крім використання цих класів, користувачі Visual Basic можуть використовувати методи і властивості, що надаються класом Microsoft.VisualBasic.FileIO.FileSystem для файлового введення-виведення.

Потоки включають три основні операції:

Читання - перенесення інформації з потоку в структуру даних, таку як масив байтів.

Запис - перенесення даних в потік з джерела даних.

Пошук - визначення і зміна поточної позиції всередині потоку.

Залежно від базового джерела або сховища даних потік може підтримувати лише деякі з цих можливостей. Наприклад, клас PipeStream не підтримує пошук. Властивості CanRead. CanWrite і CanSeek потоку визначають операції, підтримувані потоком.

Нижче перераховані деякі часто використовувані класи потоку:

FileStream - для читання і запису в файл.

IsolatedStorageFileStream - для читання і запису в файл в ізольованому сховищі.

MemoryStream - для читання і запису в пам'ять в якості резервного сховища.

BufferedStream - для підвищення швидкодії операцій читання і запису.

NetworkStream - для читання і запису на мережеві сокети.

PipeStream - для читання і запису в анонімні і іменовані канали.

CryptoStream - для зв'язку потоків даних з криптографічними перетвореннями.

Приклад асинхронної роботи з потоками см. В розділі Асинхронний файловий ввід-висновок.

Читання і запис великих обсягів даних може бути ресурсномісткої. Ці завдання необхідно виконувати асинхронно, якщо програма має продовжувати відповідати на запити користувача. У разі синхронних операцій введення-виведення потік призначеного для користувача інтерфейсу буде заблокований до тих пір, поки ресурсномістка операція не завершиться. При розробці додатків для Магазин Windows 8.x використовуйте асинхронні операції введення-виведення, щоб не створювалося враження, що додаток припинило свою роботу.

Стисненням називається процес скорочення розміру файлу. Розпакування - це процес вилучення вмісту стиснутого файлу, що призводить його в формат, придатний для використання. Простір імен System.IO.Compression містить типи для стиснення і розпаковування файлів і потоків.

При стисненні і розпакуванні файлів і потоків часто використовуються наступні класи:

ZipArchive - для створення і відновлення вмісту ZIP-архіву.

ZipArchiveEntry - для подання стисненого файлу.

ZipFile - для створення, вилучення та відкриття стисненого пакета.

ZipFileExtensions - для створення і вилучення вмісту з стисненого пакета.

DeflateStream - для стиснення та розпакування потоків за допомогою алгоритму Deflate.

GZipStream - для стиснення та розпакування потоків в форматі gzip.

Ізольоване сховище - це механізм зберігання даних, що забезпечує ізоляцію і безпеку шляхом визначення стандартизованих способів зіставлення коду з збереженими даними. Сховище надає віртуальну файлову систему, ізольовану по користувачеві, збірці і (необов'язково) домену. Ізольоване сховище особливо корисно в тому випадку, коли додаток не має дозволу на доступ до файлів користувача. Можна зберегти параметри або файли для додатка таким способом, який контролюється політикою безпеки комп'ютера.

Ізольоване сховище недоступне для додатків Магазин Windows 8.x. Замість цього використовуйте класи даних програми, які містяться в просторі імен Windows.Storage. Детальніше див. У розділі Доступ до даних додатка в Центрі розробки для Windows.

Часто використовуються такі класи, що реалізують ізольоване сховище:

IsolatedStorage надає базовий клас для реалізації ізольованого сховища.

IsolatedStorageFile надає область ізольованого сховища, в якій містяться файли і каталоги.

IsolatedStorageFileStream представляє файл в ізольованому сховищі.

NET для додатків Магазину Windows 8.x містять безліч типів для читання і запису в потоки, проте цей набір містить не всі типи введення-виведення платформи .NET Framework.

Слід зазначити деякі важливі відмінності у використанні операцій введення-виведення для додатків в стилі Магазин Windows 8.x:

Спеціальні типи, які відносяться до операцій з файлами, такі як File. FileInfo. Directory і DirectoryInfo. не включені в .NET для додатків Магазину Windows 8.x. Замість цього використовуйте типи в просторі імен Windows.Storage Середовище виконання Windows, такі як StorageFile і StorageFolder.

Ізольоване сховище недоступне. Замість цього використовуйте дані програми.

Використовуйте асинхронні методи, такі як ReadAsync і WriteAsync. щоб запобігти блокування потоку призначеного для користувача інтерфейсу.

Типи стиснення на основі шляху ZipFile і ZipFileExtensions недоступні. Замість цього використовуйте типи в просторі імен Windows.Storage.Compression.

При використанні класів в просторі імен System.IO необхідно виконати вимоги безпеки операційної системи, такі як списки управління доступом для контролю доступу до файлів і каталогів. Ця вимога доповнює інші вимоги FileIOPermission. Списками управління доступом можна управляти програмно. Додаткові відомості див. У розділі Практичний посібник. Додавання або видалення записів списку управління доступом.

За замовчуванням політика безпеки не дозволяє звертатися до файлів на комп'ютері користувача через Інтернет або з додатків интрасети. Тому при складанні коду не використовуйте класи введення-виведення, яким потрібен шлях до фізичного файлу, завантажуваного через Інтернет або інтрамережа. Замість цього використовуйте ізольоване сховище для звичайних додатків .NET Framework або дані додатки для додатків Магазин Windows 8.x.

Перевірка безпеки виконується тільки при створенні потоку. Тому не рекомендується відкривати потік, а потім передавати його коду з меншим рівнем довіри або доменів додатків.

Схожі статті