:: Меню ::

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

    :: Друзі ::

     
     

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

    = =

     

     

     

     

    Класі File

    Клас File, як і клас Directory, складається із загальних методів, яким при виклику зазвичай передається ім'я файлу. Ці методи пріменяктея при копіюванні, удаленді і переміщенні файлів. Основні методи класу File перераховані в таблиці. 9.3. Звернете увагу, - всі параметри передаються за значенням (у таблиці відсутні методи класу File, призначені для роботи з потоками даних, — вони будуть розглянуті нижче).

    Таблиця 9.3. Основні методи класу File

    Метод

    Опис

    Copy(Byval sourcefitename As String,byval destfilename As String)

    Копіює файл. Існує переобтяжена версія методу з третім логічним параметром overwrite; якщо цей параметр рівний True, існуючий файл із заданим ім'ям перезаписується

    Delete(Byval path As String)

    Видаляє заданий файл. Цікава подробиця: якщо файл не існує, виключення не ініціюється (див. опис методу Exists)

    Exists(Byval path As String)

    Повертає логічну величину, яка показує, чи існує файл із заданим повним ім'ям

    Getattributes(Byval path As String)

    Повертає значення перераховуваного типу Fileattributes з описом атрибутів файлу — архівний, системний і так далі (про те, як використовувати отриманий об'єкт, розказано в наступному розділі)

    Getcreationtime (Byval path As String)

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

    Getlastaccesstime (Byval path As String)

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

    Getlastwritetime (Byval path As String)

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

    Move(Byval sourcefilename As String, Byval destfilename As String)

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

    Setattributes(Byval path As String, Byval fileattributes As Fileattributes)

    Задає атрибути вказаного файлу

    Атрибути файлу

    Операції з атрибутами файлів і каталогів виконуються достатньо часто, тому в .NET Framework був включений зручний клас Fileattri bute. Ймовірно, правильніше було б назвати його Filedi rectoryattri bute, оскільки всі атрибути відносяться не тільки до файлів, але і до каталогів.

    Значення перераховуваного типу зазвичай об'єднуються порозрядними операціями, щоб уникнути всіляких помилок в програмі. Не використовуйте команди наступного вигляду:

    If File.GetAttributes("c:\foo.txt") = Fileattributes.Readonly Then...

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

    If File.GetAttributes("c:\foo.txt") And Fileattributes.Readonly _

    = Fileattributes.Readonly Then...

    При необхідності атрибути об'єднуються оператором Оr. Приклад:

    File.SetAttributes( "з: \foo.txt".

    Not (Fileattributes.Archive) Or Fileattributes.Hidden)

    Команда призначає атрибути C:\foo.txt таким чином, що файл стає прихованим (Hidden), а архівний біт (Archive) скидається. Нижче перераховані найважливіші значення цього перераховуваного типу:

    Archive

    Compressed

    Di rectory

    Encrypted

    Hidden

    Normal (атрибути не встановлені)

    Readonly

    System

    Класи Directoryinfo і Fileinfo

    На відміну від узагальнених класів Directory і Filе класи Directory Info і Fileinfо інкапсулюють конкретні (або що потенційно існують) каталоги і файли. Щоб використовувати їх, необхідно заздалегідь створити екземпляр класу. Під потенційним існуванням ми маємо на увазі, що об'єкт Di rectorylnfo або Fi lelnfo може бути створений навіть в тому випадку, якщо файл або каталог із заданим ім'ям ще не існує і створюється при подальшому виклику методу Create.

    Як правило, при створенні екземплярів цих класів при виклику конструктора указується ім'я каталога або файлу. Приклад:

    Dim mydirectory As Directorylnfo

    mydirectory = New Directorylnfo("C:\test Directory")

    Поточний каталог позначається символом «.»:

    Dim currentdir As New Directorylnfo(".")

    Після створення об'єкту Directorylnfo можна запитати різні відомості про відповідний каталог — наприклад, час створення:

    Msgbox(mydirectory.GreatienTime)

    Як згадувалося вищим, одна з найчудовіших особливостей цих класів полягає в тому, що їх члени повертають об'єкти, а не рядки. Наприклад, в наступній програмі виклик Getfiles у виділеному рядку повертає колекцію об'єктів Filelnfo, що дозволяє при необхідності викликати методи цих об'єктів.

    Imports System.IO

    Module Modulel Sub Main()

    Dim mydi rectory As Directorylnfo Try

    mydirectory =New Directoryinfo("C:\test Directory")

    Dim afile As File Info

    For Each afile In mydirectory.GetFiles

    Consol e. Writeli ne( "The fi1e named " & afile. Full Name & _

    "has length " & afile.Length) Next Catch e As Exception

    Msgbox("eeks -an exception " & e.StackTrace) Finally

    Console.WriteLine("Press enter to end")

    Console.ReadLine()

    End Try

    End Sub

    End Module

    Рекурсивний перегляд дерева каталогів

    Клас Directorylnfo зручний тим, що на його основі легко будуються узагальнені процедури для рекурсивного перебору дерева каталогів. Як було показано в розділі 4, при цьому зручно використовувати допоміжну процедуру, яка, у свою чергу, викликає іншу процедуру для роботи з файлами заданого каталога. Нижче приведена одна з можливих реалізацій цього рекурсивного процесу:

    Option Strict On Imports System.IO Module Modulel

    Submain()

    Dim nameofdirectory As String ="C:\"

    Dim mydirectory As Directoryinfo

    mydirectory = New Directoryinfo(nameofdirectory)

    Workwithdirectory(mydirectory)

    End Sub

    Public Sub Workwithdirectory(Byval adir As Directorylnfo)

    Dim nextdir As Directorylnfo Workwithfilesindir(adir)

    For Each nextdir In adir.GetDirectories

    Workwithdirectory(nextdir) Next

    End Sub

    Public Sub Wbrkwithfilesindir(Byval adir As Directorylnfo)

    Dim afile As Filelnfo For Each afile In adir.GetFiles()

    ' Виконати операцію з файлом.

    ' У нашому прикладі просто виводиться уточнене ім'я.

    Consolе.WriteLine(afi1e.Ful1 Name) Next

    End Sub

    End Module

    Наступний, реалістичніший приклад активізує форму, показану на мал. 9.1. Програма заносить всі приховані файли заданого каталога в список і продовжує рекурсивну обробку дерева каталогів. Курсор миші замінюється зображенням пісочного годинника; за цією ознакою користувач дізнається про те, що програма виконує якусь тривалу операцію.

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

    Private Sub Buttonl_click(Byval sender As System.Object,_

    Byval e As System.EventArgs) Handles Buttonl.Click

    'Замінити курсор зображенням пісочного годинника

    Me.Cursor = Cursors.WaitCursor Listboxl. Items. Clear()

    Workwithdirectory(New Directorylnfo(Textboxl.Text))

    Me.Cursor = Cursors.Default

    End Sub

    Public Sub Workwithdirectory(Byval adir As Directorylnfo)

    Dim nextdir As Directorylnfo Try

    Workwithfilesindir(adir)

    For Each nextdir In adir.GetDirectories

    Workwithdirectory(nextdi r) Next

    Catch e As Exception

    Msgbox(e.message Svbcrlf Se.StackTrace)

    End Try

    End Sub

    Public Sub Workwithfilesindir(Byval adir As Directorylnfo)

    Dim afile As Filelnfo For Each afile In adir.GetFiles()

    If afile.Attributes And _

    Fileattributes.Hidden = Fileattributes.Hidden Then

    Listboxl. Items. Add( "FOUND hidden filenamed " & afile. Fullname)

    End If

    Next

    End Sub

    Мал. 9.1. Форма для рекурсивного перегляду каталогів

    Окрім мнврепоточной реалізації при складніших операціях код процедури Workwithfheslndir слід було б укласти в блок Try-catch.

     




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

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

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


    :: Реклама ::

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


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

    -


     

     

     


    Copyright ©