:: Меню ::

Головна
  • Про сайт
  • Введення
  • Середовище програмування VB .NET: Visual Studio .NET
  • Вирази, оператори і передача управління
  • Класи і об'єкти
  •  Спадкоємство і інтерфейси
  • Обробка подій і делегати
  • Обробка помилок в VB .NET
  • Форми Windows, графічний вивід і друк
  • Уведення-виведення
  •  Багатопотокові застосування
  • Підтримка баз-даних в VB .NET
  • Короткий огляд ASP .NET
  • Складки .NET, установка додатків і COM Interop
  • Книга для гостей
    Контакти
    Добавити у вибране

    :: Друзі ::

     
     

    :: Лічильники ::

    = =

     

     

     

     

    Уведення-виведення

    • Каталоги і файли
    • Клас Path
    • Клас Directory
    • Класі File
    • Атрибути файлу
    • Класи Directorylnfo і Fileinfo
    • Рекурсивний перегляд дерева каталогів
    • Найважливіші члени класів Filesystemlnfo, Fileinfo і Directorylnfo
    • Потоки даних
    • Запис у файл
    • Читання і запис двійкових даних: класи Binaryreader і Binarywriter
    • Textreader, Textwriter і похідні класи
    • Об'єктні потоки: збереження і відновлення об'єктів
    • Проста серіалізация
    • Просте відновлення
    • Застосування серіалізациі при клонуванні об'єктів
    • Практичний приклад: динамічний список з підтримкою серіалізациі
    • Мережеві потоки
    • Монітор файлової системи

    У колишніх версіях Visual Basic використовувалися різні засоби обробки даних, причому вибір визначався типом джерела даних. Наприклад, обробка даних, прочитаних з файлу на диску, принципово відрізнялася від обробки даних, завантажених з Інтернету. Ці часи залишилися у минулому. Одній з цілей, поставлених при проектуванні .NET Framework, було забезпечення уніфікованого механізму обробки даних, не залежного від джерела.

    Центральне місце в цьому механізмі займає поняття потоку (stream). Термін «потік» в даному випадку походить від виразу «потік байтів». Власне, всі дані, з якими працює комп'ютер, — числа, текст і графіка — зводяться до звичайної послідовності байтів. Таким чином, підхід, вибраний проектувальниками .NET Framework, виглядає цілком логічно — вони розробили абстрактний клас, що виконує узагальнені операції з даними. Наявність абстрактного класу спрощує програмування введення-виводу в VB .NET і виявляє схожість між різнорідними операціями. Коротше кажучи, абстрактний клас Stream, помічений ключовим словом Mustlnherit, є ідеальною базою для побудови об'єктно-орієнтованої ієрархії введення-виводу.

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

    Розділ завершується прикладом використання нових серверних засобів RAD (Rapid Application Development) для написання простого монітора файлової системи. Програма стежить за змінами в каталогах (такими, як створення і видалення файлів) і обробляє різні події, що ініціюються залежно від типу змін. У попередніх версіях VB написання подібних програм було сильно утруднене тим, що програмістові доводилося використовувати Windows API вельми нетривіальним чином. І хоча в цій книзі ми не зможемо скільки-небудь повно описати Rad-іногоументарій VB .NET, ми сподіваємося, що це підстебне вашу цікавість і змусить докладніше вивчити цей надзвичайно корисний аспект VB .NET.

    Даний розділ познайомить читача з основними принципами введення-виводу в .NET, проте вона не претендує на повний виклад цієї обширної теми. Про введення-вивід цілком можна написати окрему книгу — як і серверному RAD-инструментарии!

    Каталоги і файли

    У VB .NET існують два класи для роботи з каталогами і два класи для роботи з файлами.

    • Класи Directory і Directorylnfo.
    • Класи File і Filelnfo.

    Звернення до функціональних можливостей класів Directory і File відбувається за допомогою загальних методів. Оскільки методи класів Di rectory і Fi1е є загальними, вони можуть викликатися і без попереднього створення екземпляра оператором New. Звичайно, це підвищує їх ефективність при разових зверненнях до конкретного файлу або каталога. Проте при багатократному зверненні до файлу або каталога ці методи стають менш ефективними. Класи Di rectorylnfo і Filelnfo містять звичайні методи, тому звернення до їх членів відбувається через конкретні екземпляри.

    Інша відмінність між цими парами полягає в тому, що класи Directory і File є похідними безпосередньо від Object, а класи Directory-info і Fileinfo оголошені похідними від абстрактного (Mustlnherit) класу Filesysteminfo, що містить універсальні методи ніби Lastaccesstime і Fullname.

    Та все ж найпринциповіша відмінність полягає в іншому. Класи Directorylnfo і Filelnfo набагато краще підходять для рекурсивного використання результатів, як було показано в прикладі, приведеному в розділі 4. Річ у тому, що члени класів Directory і File зазвичай повертають рядки з описом каталогів або файлів, тоді як члени класів Di rectorylnfo і Filelnfo зазвичай повертають екземпляри своїх класів. Як було показано в розділі 4, ця особливість спрощує написання рекурсивних програм.

    Між цими парами існує ще одна тонка відмінність: вони володіють різними профілями безпеки. Хоча в цій книзі нам не вдасться скільки-небудь детально описати питання безпеки при програмуванні для .NET, ви винні хоч би у загальних рисах розуміти, що класи Directory і File перевіряють привілеї вашої коди для звернення або модифікації файлу або каталога при кожному використанні, а класи Directorylnfo і Filelnfo перевіряють їх всього один раз при створенні екземпляра об'єкту. Саме цим і пояснюється підвищення їх ефективності при багатократному виконанні операцій з одним файлом або каталогом.

    Оскільки існування даних, до яких ви звертаєтеся, не гарантоване, звернення до файлів або каталогів часто полягають в блоки Try-catch. Втім, на ці класи розповсюджується одне з основних правил при роботі з виключеннями: не використовуйте виключення там, де можна обмежитися простою перевіркою. Наприклад, в звичайних умовах немає чого перехоплювати виключення Di rectorynotfoundexcepti on — простіше заздалегідь викликати метод Exists і переконатися в тому, що каталог існує. Нижче перераховані основні виключення, що зустрічаються при операціях з файлами і каталогами. Ієрархію очолює базовий клас Ioexception:

    Ioexception

    >Directorynotfoundexception

    > Endofstreamexception

    >Fileloadexception

    >Filenotfoundexception

    Клас Path

    Перш ніж розглядати операції з каталогами і файлами, слід познайомитися з класом Path. Цей клас містить декілька загальних методів, призначених для обробки уточнених імен файлів [ Цікава подробиця: у описі цього класу, приведенням в документації VB .NET, згадуються деякі аспекти кросс-платформенних операцій. Зокрема, згадується про відмінності між символом «/» і роздільником каталогів «\», використовуваним в системах сімейства UNIX (у тому числі і в системі BSD, для якої Microsoft анонсувала підтримку CLR). ]. Мережеві імена файлів влаштовані дещо складніше за локальні імена, тому методи класу Path приносять безперечну користь (до речі кажучи, аналіз навіть локальних імен — заняття на любителя). Основні члени класу Path перераховані в таблиці. 9.1.

    Таблиця 9.1. Найважливіші члени класу Path

    Член класу

    Опис

    Directoryseparatorchar

    Символ-роздільник каталогів для поточної платформи

    Invalidpathchars

    Масив всіх символів, неприпустимих в уточненому імені файлу

    Pathseparator

    Символ-роздільник компонентів уточненого імені файлу для поточної платформи

    Volumeseparatorchar

    Символ-роздільник імен томів для поточної платформи

    Changeextension(Byval path

    As String,byval extension As String)

    Змінює розширення файлу і повертає нове ім'я


    Getdirectoryname (Byval pathas String)

    Повертає шлях до каталога, в якому знаходиться файл

    Getextension(Byval path As String)

    Повертає розширення файлу

    Getfhename(Byval path As String)

    Повертає ім'я і розширення для заданого уточненого імені

    Getfullpath(Byvat path As String) Перетворить задане ім'я файлу у формат повного (fully qualified) імені
    Getpathroot(Byval path As String) Повертає кореневий елемент заданого уточненого імені
    Gettempfilename (Byval path As String) Повертає унікальне ім'я тимчасового файлу і створює на диску файл нульової довжини
    Gettemppath(Byval path As String) Повертає шлях до каталога тимчасових файлів в поточній системі

    Getfilenamewithoutextension (Byval path As String)

    Повертає ім'я файлу без розширення

    Клас Directory

    Більшість методів класу Directory ідентифікують каталоги за допомогою повертаних рядків. Оскільки всі члени класу оголошені загальними, при зверненні до них не обов'язково указувати конкретний екземпляр. Приклад:

    System.IO.Directory.GetCurrentDirectory()

    Ця команда повертає рядок з описом поточного каталога. Метод Getdirectories(pathstring) повертає масив рядків з описом підкаталогів каталога, заданого параметром pathstring. Опис інтерпретується або як шлях, заданий щодо каталога поточного застосування, або як шлях в схемі UNC (Universal Naming Convention). Наступна програма виводить ім'я поточного каталога і імена всіх його підкаталогів.

    Imports System.IO Module Modulel

    Sub Main()

    Dim curdir.nextDir As String Try

    curdir =Directory.GetCurrentDirectory ()

    Console.WriteLine(curdir)

    For Each nextdir In Directory.GetDirectories(curdir)

    Console.WriteLine(nextdir) Next

    Catch ioe As Ioexception

    Console.WriteLine("eeeks -i/o problems!" & ioe.message)

    Catch e As Exception

    Consol e. Write(e.stacktrace) Finally

    Console.ReadLine()

    End Try

    End Sub

    End Module

    Якщо ваші потреби не обмежуються простим виведенням імен каталогів, краще скористатися класом Directoryinfo. Докладніший опис цього класу приводиться нижче.

    Окрім передачі рядка з описом каталога методу Getdirectories можна передати шаблон з метасимволами, використовуваними в DOS [ «?» позначає один символ, а «*» — декілька символів. ]. Найважливіші методи класу Di rectory перераховані в таблиці. 9.2. У всіх випадках параметри передаються за значенням (з ключовим словом Byval).

    Таблиця 9.2. Найважливіші методи класу Directory

    Метод

    Опис

    Create Directory (Byval pathname As String)

    Створює каталог із заданим ім'ям і повертає об'єкт Directory Info для створеного каталога. При необхідності також створюються всі проміжні каталоги

    Delete(Byval pathname As String)

    Видаляє порожній каталог. Щоб видалити непорожній каталог разом зі всіма каталогами і файлами, скористайтеся командою Delete (pathname As String, True)

    Exists(Byval pathname As String)

    Повертає логічну ознаку існування каталога

    Getcreationtime (Byval pathname As String)

    Повертає об'єкт дати, що містить інформацію про дату і час створення каталога

    Getcurrentdi rectory

    Повертає рядок з описом поточного каталога

    Getdirectories (Byval pathname As String)

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

    Getdi rectoryroot •(Byval pathname As String)

    Повертає рядок з описом кореневої частини заданого шляху

    Getfiles(Byval pathname As String)

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

    Getlastaccesstime (Byval pathname As String)

    Повертає об'єкт дати, що містить інформацію про час останнього звернення до каталога

    Getlastwritetime (Byval pathname As String)

    Повертає об'єкт дати, що містить інформацію про час останнього запису в каталог

    Getlogicaldrives

    Повертає строковий масив з іменами логічних дисків у форматі «діськ:\» (наприклад, С:\)

    Getparent (Byval pathname As String)

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

    Move(Byval sourcedirname As String,byval destdirname As String)

    Переміщає каталог зі всім вмістом в межах диска

    Setcurrentdirectory (Byval pathname As String)

    Задає поточний каталог




    :: Наша кнопка ::

    Отримати код:

    Підтримайте наш сайт і розмістіть нашу кнопку на своєму ресурсі.


    :: Реклама ::

    Скачати безкоштовно програму Microsoft Front Page 2003


    :: Посилання ::

    -


     

     

     


    Copyright ©