C#. Клас FileStream. Додаткові опції запису/читання. Зчислення FileOptions

Клас FileStream. Додаткові опції запису/читання. Зчислення FileOptions. Приклади

Дана тема є продовженням теми:


Зміст


Пошук на інших ресурсах:




1. Зчислення FileOptions. Призначення

Клас FileStream має ряд конструкторів, з допомогою яких можна встановлювати різні режими доступу до файлу. Згідно з документацією один з конструкторів класу FileStream має наступний вигляд:

public FileStream(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, int bufferSize, System.IO.FileOptions options)

тут

  • path – шлях до файлу або ім’я файлу;
  • mode – константа зі зчислення FileMode, яка визначає режим відкриття файлу. Більш детально про зчислення FileMode можна прочитати тут;
  • access – константа зі зчислення FileAccess, яка визначає спосіб доступу до файлу. Більш детально про зчислення FileAccess можна прочитати тут;
  • share – значення зі зчислення FileShare, яке визначає можливість використання файлу як спільного ресурсу різними процесами;
  • bufferSize – розмір буферу, який використовується для порційного запису/читання даних у файлі. За замовчуванням bufferSize = 4096;
  • options – константа зі зчислення FileOptions, яка визначає різні опції використання файлу.

У зчисленні FileOptions реалізовані додаткові можливості (опції), які визначають призначення відкритого файлу:

  • Asynchronous – вказує, що файл може бути використаний для асинхронного читання та запису;
  • DeleteOnClose – вказує, що файл буде видалений після того, як він більше не буде використовуватись;
  • Encrypted – вказує, що файл зашифрований і його можна розшифрувати лише за допомогою того самого облікового запису користувача, що використовується для шифрування;
  • None – вказує, що ніяких додаткових опцій не застосовується для створюваного об’єкту типу FileStream;
  • RandomAccess – вказує на те, що до файлу здійснюється випадковий доступ. Ця вказівка дає системі підказку для оптимізації кешування файлів;
  • SequentialScan – вказує на те, що файл читається послідовно від початку до кінця. Ця вказівка може бути використана як підказка системі здійснити оптимізацію кешування файлів. Це може дати деяке підвищення продуктивності;
  • WriteThrough – вказівка системі здійснювати запис через будь-який проміжний кеш і переходити безпосередньо на диск.

 

2. Приклади обробки (запис/читання) файлу з заданими додатковими можливостями FileOptions
2.1. Створення файлу з використанням опцій зі зчислення FileOptions

У фрагменті коду створюється файл для асинхронного читання та запису. Розмір буфера встановлюється рівним 8192 байти. Файл може бути використаний для асинхронного читання та запису.

...

// Створення файлу для асинхронного читання та запису
using (FileStream fs = new FileStream("file.bin", FileMode.Create,
FileAccess.ReadWrite, FileShare.None, 4096, FileOptions.Asynchronous))
{
  // Використання екземпляру fs для обробки файлу
  ...
}

...

Якщо у вищенаведеному коді, в конструкторі значення

FileOptions.Asynchronous

замінити кодом

FileOptions.Asynchronous | FileOptions.DeleteOnClose

то після створення та використання, файл з іменем file.bin буде видалений.

Таким самим способом можна задавати інші додаткові опції управління файлом зі зчислення FileOptions.

 

2.2. Відкриття файлу для запису

Щоб відкрити файл для запису з встановленим випадковим доступом, можна використати наступний код:

...

// Відкриття файлу для запису
using (FileStream fs = new FileStream("file1.bin", FileMode.OpenOrCreate,
FileAccess.Write, FileShare.Write, 2048, FileOptions.RandomAccess))
{
  ...
}

...

У вищенаведеному фрагменті створюється файл з іменем file1.bin. Режим відкриття задається рівним OpenOrCreate (відкрити раніше створений файл або створити новий файл). Режим доступу встановлюється рівним FileAccess.Write. Константа FileShare.Write вказує, що файл може бути спільним ресурсом для запису з різних процесів (потоків). Розмір буферу становить 2048 байт. Константа FileOptions вказує, що до файлу здійснюється випадковий доступ.

 

2.3. Відкриття файлу для читання. Приклад побайтного асинхронного читання файлу

Щоб відкрити файл для читання з використанням констант зі зчислення FileOptions можна використати, наприклад, наступний код

...

// Відкриття файлу для читання
using (FileStream fs = new FileStream("file3.bin", FileMode.Open,
FileAccess.Read, FileShare.Read, 2048, FileOptions.Asynchronous))
{
  // Зчитати байти з файлу, поки не буде досягнуто кінець файлу
  // і записати ці дані в масив A

  // Виділити пам'ять для буферу
  byte[] A = new byte[fs.Length];

  // додаткові змінні
  int t, i;

  // Цикл побайтного читання даних
  i = 0;
  do
  {
    t = fs.ReadByte(); // зчитати байт
    if (t != -1)
        A[i++] = (byte)t;
  }
  while (t != -1);
}

...

У попередньому прикладі побайтно читається файл file3.bin. Файл відкритий для асинхронного читання. Зчитані дані копіюються в байтовий масив A.

 


Зв’язані теми