Vbs вывести список файлов

Обновлено: 06.07.2024

Иногда для оптимизации управления хранением данных на диске администратору требуется узнать, какие файлы принадлежат пользователю и сколько места на диске они занимают. Эту информацию нельзя получить из пользовательского графического интерфейса Windows или с помощью сценария Windows. Я написал библиотеку ActiveX DLL и сценарий VBScript, который выводит список файлов, принадлежащих определенному владельцу, а также размеры этих файлов

Получение информации, не предоставляемой средством квотирования дисков в Windows

Ограничения функции квотирования диска

В Windows 2000 и более поздних версиях имеется функция квотирования диска, которую можно использовать для отслеживания или ограничения работы с диском NTFS. Для просмотра или настройки квотирования диска нужно щелкнуть правой кнопкой мыши на выбранном диске в Windows Explorer, выбрать пункт Properties, и перейти на закладку Quota.

Щелкните на кнопке Quota Entries, чтобы увидеть список пользователей и объем занимаемого каждым из них дискового пространства. Эта информация берется из сведений о владельце в файлах NTFS. Диалоговое окно Quota Entries позволяет переопределить записи квот, установленные по умолчанию, последовательно (один пользователь за другим), добавлять и удалять записи квот и даже импортировать и экспортировать их. К сожалению, настраивать записи квот на основе групп невозможно, а функция квотирования может быть разрешена или запрещена только для томов. Однако даже с этими ограничениями функция квотирования диска может быть полезной.

Окно Quota Entries отображает список владельцев файлов и объем используемого ими дискового пространства, но операционная система не предоставляет способ получения списка файлов, принадлежащих пользователю, если только не щелкнуть правой кнопкой мыши на записи пользователя, не выбрать пункт Delete, а потом Yes. Если пользователь имеет файлы на данном томе, Windows отобразит диалоговое окно, которое позволит удалить или присвоить себе право владения файлами пользователя. В этом окне отображаются файлы, принадлежащие пользователю, но не показано занимаемое ими дисковое пространство. Также нет возможности экспортировать список файлов в новый файл для отчетности. Это ограничение может вызвать проблемы, если пользователи начнут превышать объем имеющегося дискового пространства.

Чтобы решить задачу построения списка файлов и дискового пространства для данного владельца файлов, я решил написать сценарий. Сценарии Windows не позволяют получить имя владельца файла, и хотя существует возможность узнать имя владельца файла с помощью средств Windows Management Instrumentation (WMI), я решил отказаться от нее из соображений сохранения производительности. Вместо этого я создал библиотеку ActiveX DLL GetOwner.dll, которая возвращает имя владельца файла. Еще я написал сценарий OwnedBy.vbs на VBScript, использующий библиотеку DLL для вывода неограниченного списка файлов, принадлежащих определенному пользователю, их размеров и содержащих их папок. Можно настроить вывод списка в файл для дальнейшего анализа и при необходимости импортировать его в электронную таблицу или базу данных.

Требования сценария

Для работы OwnedBy.vbs под Windows 2000 необходим пакет VBScript 5.6. Это требование можно удовлетворить, установив пакет Microsoft Internet Explorer (IE) 6.0. В системах Windows Server 2003 и Windows XP пакет VBScript 5.6 является частью операционной системы.

Сценарий также требует регистрации библиотеки GetOwner.dll на локальном компьютере. Для этого нужно скопировать файл GetOwner.dll в папку (например, %systemroot%system32) и ввести в командной строке следующую команду:

где path - путь к файлу getowner.dll. Параметр /s (silent) отключает появление диалогового окна с подтверждением. Чтобы удалить библиотеку DLL из реестра, следует добавить параметр /u после команды regsvr32. Для удаления без подтверждения нужно одновременно использовать параметры /u и /s. Чтобы иметь возможность удалять и добавлять библиотеки DLL в реестр, пользователь должен быть членом локальной группы Administrators.

Для компиляции библиотеки GetOwner.dll я использовал пакет Visual Basic (VB) 6.0. Рабочий модуль VB (msvbvm60.dll) устанавливается по умолчанию вместе с системой Windows 2000 и более поздними версиями.

Использование сценария OwnedBy.vbs

Из-за того, что сценарий OwnedBy.vbs использует для вывода окно команд, он должен исполняться с применением хоста CScript. Для настройки CScript в качестве хоста по умолчанию для текущего пользователя нужно ввести в командную строку следующую команду:

Сценарий OwnedBy.vbs использует следующий синтаксис командной строки:

Ключевое слово cscript требуется только в том случае, если узел CScript не является хостом сценария по умолчанию. Другие параметры командной строки могут присутствовать всегда.

Необходимо указать одно или несколько имен папок вместо параметра . Если имя папки содержит пробелы, его следует заключить в кавычки. Если требуется получить информацию по файлам в подкаталогах, добавьте параметр /s. Сценарий выдает выходные данные в форме столбцов. По умолчанию в выходных данных столбцы отделяются друг от друга символом табуляции. Чтобы указать другой разделительный символ, используйте параметр /d, сопровождаемый символом «;», например ключ /d: ; позволяет вывести список, разделяемый символом «;».

Можно указать, что в списке должны отображаться только файлы, принадлежащие определенному пользователю. Для этого нужно ввести ключ /o и заменить параметр owner именем пользователя в формате «доменимя пользователя». Если не указать имя домена, используется текущий домен (тот, в котором вы регистрировались). Если не указать ключ /o, сценарий OwnedBy.vbs включает в список файлы, принадлежащие каждому из пользователей.

По умолчанию сценарий OwnedBy.vbs выводит строку заголовка, описывающую каждый столбец (то есть Owner, ParentFolder, Name, Size). Надписи заголовка могут пригодиться при импортировании отчета в электронную таблицу или базу данных, но если вы не хотите, чтобы сценарий выводил строку заголовка, используйте ключ /nh.

В конце сценарий выводит итоговую строку вида

где n - суммарный размер файлов, x - число найденных файлов. Чтобы отключить вывод итоговой строки, используйте ключ /ns.

Подпрограмма Main

Если объект ListByOwner успешно создается, сценарий проверяет наличие аргументов командной строки /o, /d, /s, /nh и /ns. Аргументы /o, /d и /s соответствуют свойствам объекта ListByOwner - Owner, Delim и Recurse. Я вкратце остановлюсь на них. Булевы переменные blnHeader и blnSummary устанавливаются в значение False, если параметры /nh и /ns, соответственно, присутствуют в командной строке.

Если переменная blnHeader имеет значение True (то есть ключ /nh отсутствует в командной строке), сценарий выполняет метод OutputHeader объекта ListByOwner. Далее сценарий отключает установленный по умолчанию обработчик ошибок VBScript с помощью выражения On Error Resume Next и переходит к перебору аргументов командной строки (то есть имен папок) с помощью цикла For Each.

Работа с объектом ListByOwner

Работа сценария OwnedBy.vbs выполняется с помощью объекта ListByOwner. Свойства, используемые объектом ListByOwner, как и частные переменные, применяемые каждым свойством, приведены в Таблице 1. Методы объекта ListByOwner приведены в Таблице 2.

Когда сценарий создает экземпляр объекта ListByOwner с помощью ключевого слова New среды VBScript, автоматически вызывается процедура события Class_Initialize, для инициализации частных переменных объекта и выполнения других задач, возникающих при создании объекта.

Затем процедура события Class_Initialize создает частный указатель на объект Scripting.FileSystemObject и устанавливает для свойств значения по умолчанию. После завершения процедуры Class_Initialize переменная objLBO подпрограммы Main содержит инициализированный объект ListByOwner.

Установка свойства Folder

Выражения Public Property Let, которые являются частью языка VBScript, определяют процедуры свойств, которые выполняют управление свойствами объекта ListByOwner. Каждая из процедур свойств устанавливает соответствующую частную переменную, как показано в Таблице 1. При установке свойства Folder код выполняет собственную обработку ошибки и вызывает ошибку, если метод GetFolder объекта FileSystem-Object не может быть выполнен. В этом случае подпрограмма Main может обнаружить ошибку в штатном режиме и перейти к следующей папке, указанной в командной строке.

Подпрограмма ProcessFolder

Когда подпрограмма Main вызывает метод Run объекта ListByOwner, он выполняет подпрограмму ProcessFolder с частной переменной objFolder в качестве аргумента. Подпрограмма ProcessFolder выполняет работу по перебору множеств файлов и папок.

Подпрограмма ProcessFolder выполняет собственную обработку ошибок. Она отключает установленный по умолчанию обработчик ошибок VBScript с помощью выражения On Error Resume Next. Потом, если частная переменная blnRecurse имеет значение True, подпрограмма перебирает множество подкаталогов исходной папки с помощью цикла For Each и вызывает сама себя для каждого подкаталога.

Далее подпрограмма перебирает множество файлов и папок с помощью цикла For Each. Имя владельца каждого файла мы получаем с помощью вызова метода GetOwner объекта objGetOwner, который возвращает строку, содержащую имя владельца файла в виде доменимя пользователя. Если свойство Owner объекта ListByOwner содержит пустую строку (например, конкретный пользователь не указан) или совпадает с именем владельца текущего файла, тогда подпрограмма выводит информацию о файле в следующем виде:

Получить список файлов в папке и подпапках
Каким образом получить список файлов в текущей папке приложения и всех подпапках рядом, с учетом.

Получить список папок в папке но не в подпапках
Здравствуйте. Как можно получить список имен папок и их количество в определенной папке но не в.

Записать в файл список найденных в указанной папке и подпапках файлов меньших указанного размера
Пользователь вводит адрес папки и размер в байтах. Программа записывает в результирующий файл.

Список файлов в папке и её подпапках
Привет всем скажите пожалуйста как получить список файлов в папке и её подпапках и подпапках папок.

Решение

Хватит меня туда посылать! Там ничего этого нет! Есть только @Vic45rus, "нуВыблиндаёте"! У Вас есть массив Files() с путями - перебирайте и добавляйте, куда нужно. Что именно не ясно? А дальше сами думайте.
Я про то как цикл поставить на нужное количество Vic45rus, Вам тут ни чем не обязаны, и никто за Вас, ничего делать не будет. Тут лишь могут помочь, указать куда копать, а дальше разбирайтесь сами! Вы мои вопросы читали? Я новичек в этом всем. Как мне их перебирать? Не нужно отвечать загадками. Может например конкретно ответите хоть на 1 вопрос?

Решение

Добавлено через 21 минуту
Полностью Ваш проект, платежи принимаю шоколадками
Будут вопросы, задавайте, правда отвечу наверное ближе к вечеру Парни, как вывести список файлов из указанной папки в RichTextBox?
Делаю так:
Не работает. Как правильно преобразовать имена файлов в текст и вывести в RichTextBox1 не пойму.

Решение

Nachrichter, я смотрел, мне это не подходит.

Добавлено через 14 минут
Nachrichter, как получить это дело десятое. Я не понимаю как вывести результат в RichTextBox1.Text
Нужно какое-то преобразование. Я не понимаю как это сделать.

Решение

Решение

Nachrichter, спасибо, именно это я и хотел.
edward_freedom, немного не то. Данный код кроме самого файла выдает еще и полный путь, до кучи еще и в одну строку всё выводится. Но в любом случае спасибо за помощь. mostApi, делайте запрос в отдельном потоке, а не в оснрвном потоке формы. Ваш давний актуальный для меня код работает, спасибо. =) Код натыкается на файлы, к которым нет доступа, или они открыты - вылетает, ошибка.

Это говорит о том, что код для Вас не работает. Да и не те задачи он выполняет

Используйте код из поста 17
Чтобы не зависало, после 4 строки впишите

Как выполнить поиск файлов в папке и подпапках, и подподпапках, и т.д.?
Здравствуйте! Как выполнить поиск файлов в папке и подпапках, и подподпапках, и т.д.? В.


Как получить список файлов в папке и вывести в CheckedListBox
Как получить список файлов в папке, вывести в лист чекбокс и если на файле(в лист чекбоксе) стоит.

как можно получить список файлов и папок в указанной папке?
Привет всем. Хочу короче, сделать shell extention. Но мне надо сделать меню, которое содержит.

Как получить в ListBox полный список файлов содержащихся в определенной папке?
народ. Помогите плиз. Мне надо получить в ListBox полный список файлов содержащихся в.


Поиск файлов в папке и подпапках
Приветствую всех. Есть папка, в ней много подпапок, в каждой из которых находятся файлы. Мне.


Создание списка файлов в папке и подпапках
Здравствуйте. Есть папка с подпапками, названия могут быть разные. Нужно получить список всех.

Работа с объектами файловой системы из скрипта VBScript, объектная библиотека ScriptingRuntime, объекты FileSystemObject, Drive, Folder, File, TextStream, просмотр всех каталогов на диске, запись/чтение информации из текстового файла

Основные возможности работы с объектами файловой системы через WSH реализованы при помощи класса FileSystemObject , который физически находится в библиотеке Scrrun . dll . Как правило, работа начинается с создания объекта FSO :

Set fso1 = WScript.CreateObject("Scripting.FileSystemObject")

Далее используем созданный объект для выполнения различных операций.

Наиболее часто используемые возможности:

1) просмотреть/запротоколировать информацию о всех дисках на компьютере (используется свойство Drives , возвращающее набор дисков, и свойства объекта Drive ):

Set oDrives = fso1.Drives

For Each i In oDrives

MsgBox ("Буква диска: " & i.DriveLetter & " Тип диска: " & i.DriveType & "Метка диска: " & i.VolumeName & " Готовность к работе: " & i.IsReady)

Подробнее про объект Drive - ниже.

2) получить список всех подкаталогов данного каталога (используется свойство GetFolder и далее возможности объекта Folder ):

Set oFolders = fso1.GetFolder("C:\")

Set oSubfolders = oFolders.SubFolders

For Each oFolder In oSubFolders

strListFolders = strListFolders & oFolder.Name & vbCrLf

MsgBox strListFolders

3) получить информацию о физическом размере диска (свойство объекта Drive TotalSize ):

Set oDrive1 = fso1.GetDrive("C")

nSize = FormatNumber (oDrive1.TotalSize,0)

MsgBox nSize

4) получить информацию о размере свободного пространства (свойства объекта Drive FreeSpace и AvailableSpace ; FreeSpace выводит информацию об физическом свободном пространстве, AvailableSpace - информацию о свободном пространстве, доступном текущему пользователю - с учетом дисковой квоты)

Set oDrive1 = fso1.GetDrive("C")

nSize = FormatNumber (oDrive1.TotalSize,0)

MsgBox nSize

5) скопировать каталог со всем содержимым (используется метод CopyFolder , true означает - перезаписывать содержимое, используется по умолчанию, поэтому можно не указывать)

fso1.CopyFolder "C:\Diagnostics", "d:\Diagnostics", true

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

6) удалить все файлы с определенным именем (например, борьба с вирусами или компьютерными игрушками). Само удаление произвести несложно: для этого используется метод DeleteFile :

fso 1. DeleteFile " C :\ scandisk . log ", True ' true означает, что удаляем в том числе и read - only файлы

Однако обычно нужно решить еще две задачи:

o обеспечить отсутствие run - time error , если проблемы с удаление файла (файл открыт и т.п.)

o подключиться к нужному каталогу

o пройти по всем каталогам и подкаталогам, удаляя данный файл.

Каждую из этих задача удобнее решать при помощи отдельных подпроцедур. Первая решается так:

Sub FileDelete(sFile)

On Error Resume Next

Fso1.DeleteFile (sFile)

If Err.Number <> 0 Then

WScript.Echo "Error deleting file: " & sFile

End If

End Sub

Чтобы подключиться к нужному подкаталогу:

Function GetFolder (sFolder)

On Error Resume Next

Set GetFolder = Fso1.GetFolder (sFolder)

If Err.Number <> 0 Then

WScript.Echo "Error connecting to folder: " & sFolder

WScript.Quit Err.Number

End Function

Чтобы пройтись по всем подкаталогам:

Sub RunSubFolders (objFolder)

If objFolder <> "\System Volume Information" Then

MainSub objFolder

For Each iFolder in objFolder.SubFolders

RunSubFolders iFolder

Проверка на System Volume Information - потому что при обращении к нему возникает ошибка.

Теперь решаем нашу задачу:

sDir = " C :"

Set objDir = GetFolder (sDir)

RunSubFolders (objDir)

Sub MainSub (objDir)

For Each eFile in objDir.Files

If LCase(eFile.Name) = LCase(sFile) Then

FileDelete eFile

Конечно, в реальной работе лучше протоколировать удаление всех файлов.

7) поменять атрибуты файла (например, скрыть важные файлы ил установить для них режим read - only ).

Для подключения к существующему файлу лучше всего использовать специальную подпроцедуру GetFile (аналог GetFolder в предыдущем примере):

Function GetFile(sFile)

On Error Resume Next

Set GetFile = Fso1.GetFile(sFile)

If Err.Number <> 0 Then

WScript.Echo("Error Connecting to: " & sFile

WScript.Quit Err.Number

End Function

Атрибуты файла определяются как битовая маска - значение свойства Attributes . Просмотреть возможные значения можно через справку по WSH 5.6, Attributes property .

Установить проще всего так (в нашем примере устанавливаем значение Read - Only ):

Set gFile = GetFile ("C:\test1.txt")

gFile . Attributes = 1

8) прочесть информацию из текстового файле

Set TxtStream = fso1.OpenTextFile("\\london1\c$\test1.txt")

Do While Not (TxtStream.atEndOfStream)

Text = Text & TxtStream.ReadLine & vbCrlf

MsgBox Text

Большие файлы настоятельно рекомендуется открывать на чтение в окне Internet Explorer тем же методом Navigate .

9) запись / добавление информации к текстовому файлу. Эта возможность используется очень часто - например, для протоколирования хода выполнения скрипта или фиксирования результатов обследования компьютеров пользователей. В некоторых ситуациях файл можно обрабатывать дальше - например, переслать его по электронной почте средствами CDO (об этом в следующих модулях) или средствами DTS положить на сервер баз данных.

Выглядит это так:

If Fso1.FileExists ("C:\test1.txt") Then

Set txtStreamOut = fso1.OpenTextFile("C:\test1.txt",8,True)

' "2" означает "открыть на добавление", True - писать в Unicode

txtStreamOut.WriteLine "Строка 1"

txtStreamOut.WriteLine "Строка 1"

Set MyFile = fso1.CreateTextFile("C:\test1.txt")

MyFile.WriteLine "Строка 1"

MyFile.WriteLine "Строка 2"

End If

Ограничения WSH при работе с файловой системой:

  • WSH в принципе не умеет работать с двоичными файлами - только текстовыми;
  • при помощи WSH нельзя настроить разрешения и аудит для файлов (это можно сделать средствами WMI ).

Многие дополнительные возможности работы в файловой системе можно получить при помощи утилит командной строки из Resource Kit :

  • associate - позволяет создать ассоциацию программы с расширением имени файла;
  • diruse - просмотреть информацию о используемом пространстве, включая файлы и каталоги, превышающие определенный размер;
  • diskmap - в командой стоке просмотреть информацию о размере физического диска и его геометрии;
  • diskuse - показать, сколько места на диске занимают файлы каждого пользователя (по владельцам)
  • dupfinder - найти повторяющиеся файлы на дисках;
  • fcopy и robocopy - утилиты надежного копирования файлов (даже если проблемы с сетью). fcopy использует Message Queuing, robocopy - свою службу
  • freedisk - возвращает объем свободного пространства на диске;
  • mcopy / mtc (эквиваленты copy и xcopy ) - копирование с созданием протокола копирования;
  • qgrep - аналог Unix grep , поиск строки в указанном файле (файлах)
  • perms - выводит разрешения для указанного файла;
  • showacls - тоже выводит разрешения, но уже для файла, каталога или дерева каталогов, в более удобном формате;
  • subinacl - позволяет выводить информацию о разрешениях на файлы (а также ключи реестра и службы) и переносить разрешения с одного пользователя на другого;
  • where - ищет файлы в указанном вами месте;
  • xcacls - позволяет менять разрешения на файлы из командной строки.

Скопировать/перенести файлы с сохранением всех разрешений (например, на новый файл-сервер) позволяет обычный FAR (или стандартная утилита Microsoft XCOPY).

В свойстве Files объекта Folder , соответствующего определенному каталогу, хранится коллекция находящихся в этом каталоге файлов (объектов File ). В листинге 6.7 приведен сценарии ListFiles.vbs, выводящий на экран названия всех файлов, которые содержатся в специальной папке Мои документы.

Листинг 6.7. Построение списка файлов в каталоге (JScript)
Создание каталога

Создать новый каталог на диске можно либо с помощью метода CreateFolder объекта FileSystemObject , либо с помощью метода Add коллекции Folders . Оба эти метода используются в сценарии MakeFolder.vbs для создания в каталоге C:\Program Files подкаталогов Новая папка и Еще одна новая папка (листинг 6.8).

Создание текстового файла

Для создания текстового файла используется метод CreateTextFile объекта FileSystemObject , который имеет один обязательный текстовый параметр (путь к создаваемому файлу) и два необязательных логических параметра ( Overwrite и Unicode ).

Параметр Overwrite имеет значение в том случае, когда создаваемый файл уже существует. Если Overwrite равно True , то такой файл перепишется (старое содержимое будет утеряно), если же в качестве Overwrite указано False , то файл переписываться не будет. Если этот параметр вообще не указан, то существующий файл также не будет переписан.

Параметр Unicode указывает, в каком формате (ASCII или Unicode) следует создавать файл. Если Unicode равно True , то файл создается в формате Unicode, если же Unicode равно False или этот параметр вообще не указан, то файл создается в режиме ASCII.

В сценарии CreateTempFile.vbs (листинг 6.9) показано, каким образом можно создать файл со случайно выбранным именем (такие файлы часто используются для записи временных данных).

Листинг 6.9. Создание временного файла со случайным именем (VBScript)
Операции чтения и записи строк для текстового файла

Последовательный (строка за строкой) доступ к текстовому файлу обеспечивает объект TextStream . Методы этого объекта позволяют читать информацию из файла и записывать ее в него. Создается объект TextStream при открытии или создании текстового файла с помощью следующих методов:

  • CreateTextFile объектов FileSystemObject и Folder;
  • OpenTextFile объекта FileSystemObject;
  • OpenAsTextStream объекта File.

Перечисленные ранее методы позволяют открывать файл в разных режимах ввода/вывода (за это отвечает параметр Iomode ) с использованием разных форматов (в соответствии со значением параметра Format ) (см. табл. 6.2, 6.3)

В листинге 6.10 приведен сценарий TextFile.vbs, в котором создается файл test1.txt и в него записываются строка текста. После этого файл открывается для чтения, строка считывается из него и выводится на экран.

Листинг 6.10. Запись информации в текстовый файл и чтение из него (VBScript)
Копирование и перемещение файлов и каталогов

Для копирования файлов/каталогов можно применять метод CopyFile/CopyFolder объекта FileSystemObject или метод Copy соответствующего этому файлу/каталогу объекта File/Folder . Перемещаются файлы/каталоги с помощью методов MoveFile/MoveFolder объекта FileSystemObject или метода Move соответствующего этому файлу/каталогу объекта File/Folder .

Отметим, что при использовании всех этих методов процесс копирования или перемещения прерывается после первой возникшей ошибки. Кроме того, нельзя перемещать файлы и каталоги с одного диска на другой.

В листингах 6.11 и 6.12 приведен сценарий CopyFile.vbs, иллюстрирующий использование метода Copy. В этом сценарии на диске C создается файл TestFile.txt, который затем копируется на рабочий стол.

Листинг 6.11. Создание текстового файла и копирование его в другой каталог (VBScript)
Удаление файлов и каталогов

Для удаления файлов/каталогов можно применять метод DeleteFile/DeleteFolder объекта FileSystemObject или метод Delete соответствующего этому файлу/каталогу объекта File/Folder . Отметим, что при удалении каталога неважно, является ли он пустым или нет — удаление будет произведено в любом случае. Если же заданный для удаления файл/каталог не будет найден, то возникнет ошибка.

В этом пошаговом руководстве приводятся основные сведения о файловом вводе-выводе в Visual Basic. В нем описывается создание небольшого приложения, перечисляющего текстовые файлы в каталоге и анализирующего их. Для каждого выбранного текстового файла приложение предоставляет атрибуты файла и первую строку содержимого. Кроме того, предоставляется возможность записать информацию в файл журнала.

Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Персонализация среды IDE.

Создание проекта

В меню Файл выберите пункт Создать проект.

Откроется диалоговое окно Создание проекта .

В области Установленные шаблоны разверните узел Visual Basic и выберите элемент Windows. В середине области Шаблоны щелкните Приложение Windows Forms.

В поле Имя введите FileExplorer , чтобы задать имя проекта, а затем нажмите кнопку ОК.

Visual Studio добавит проект в обозреватель решений, после чего откроется конструктор Windows Forms.

Добавьте в форму элементы управления из приведенной ниже таблицы и установите для их свойств соответствующие значения.

Выбор папки и перечисление файлов в ней

Создайте обработчик событий нажатия Click для кнопки browseButton , дважды щелкнув этот элемент управления в форме. Откроется редактор кода.

Добавьте следующий код в обработчик событий Click .

Вызов FolderBrowserDialog1.ShowDialog открывает диалоговое окно Выбор папки. Когда пользователь нажимает OK, свойство SelectedPath передается как аргумент методу ListFiles , который добавляется в следующем шаге.

Добавьте приведенный ниже метод ListFiles .

Этот код сперва очищает элемент ListBox.

Затем метод GetFiles возвращает коллекцию строк — по одной для каждого файла в каталоге. Метод GetFiles принимает аргумент шаблона поиска, чтобы извлечь файлы, соответствующие определенному шаблону. В этом примере возвращаются только файлы с расширением TXT.

Строки, возвращаемые методом GetFiles , затем добавляются в элемент управления ListBox.

Элемент ListBox содержит список TXT-файлов в выбранной папке.

Остановите работу приложения.

Получение атрибутов файла и содержимого текстового файла

Создайте обработчик событий нажатия Click для кнопки examineButton , дважды щелкнув этот элемент управления в форме.

Добавьте следующий код в обработчик событий Click .

Этот код проверяет, выбран ли элемент в элементе ListBox . Затем он получает запись пути к файлу из элемента ListBox . Метод FileExists позволяет проверить, существует ли файл.

Путь к файлу передается как аргумент методу GetTextForOutput , который добавляется в следующем шаге. Этот метод возвращает строку, содержащую информацию о файле. Информация о файле отображается в элементе MessageBox.

Добавьте приведенный ниже метод GetTextForOutput .

Метод GetFileInfo используется в коде для получения параметров файла. Параметры файла добавляются в StringBuilder.

Метод OpenTextFileReader считывает содержимое файла в StreamReader. Первая строка содержимого файла извлекается из StreamReader и добавляется в StringBuilder .

Выберите файл в элементе ListBox и щелкните Исследовать. В окне MessageBox будет выведена информация о файле.

Остановите работу приложения.

Добавление записи в журнал

В конец обработчика событий examineButton_Click добавьте приведенный ниже код.

Код задает путь к файлу журнала, чтобы файл журнала помещался в тот же каталог, где находится выбранный файл. Запись журнала должна содержать текущие дату и время, а далее информацию о файле.

Метод WriteAllText, которому передается аргумент append со значением True , используется для создания записи в журнале.

Запустите приложение. Перейдите к текстовому файлу, выберите его в элементе ListBox , установите флажок Сохранить результаты и щелкните Исследовать. Проверьте, добавлена ли запись в файл log.txt .

Остановите работу приложения.

Использование текущего каталога

Создайте обработчик событий для события Form1_Load , дважды щелкнув форму.

Добавьте в обработчик событий приведенный ниже код.

Этот код задает текущий каталог в качестве каталога по умолчанию для обозревателя папок.

Запустите приложение. При первом нажатии кнопки Обзор открывается диалоговое окно Выбор папки с текущим каталогом.

Остановите работу приложения.

Выборочное включение элементов управления

Добавьте приведенный ниже метод SetEnabled .

Метод SetEnabled включает и отключает элементы управления в зависимости от того, выбран ли элемент в элементе ListBox .

Создайте обработчик событий SelectedIndexChanged для элемента filesListBox , дважды щелкнув элемент управления ListBox в форме.

Добавьте вызов метода SetEnabled в новый обработчик событий filesListBox_SelectedIndexChanged .

Добавьте вызов метода SetEnabled в конце обработчика событий browseButton_Click .

Добавьте вызов метода SetEnabled в конце обработчика событий Form1_Load .

Запустите приложение. Флажок Сохранить результаты и кнопка Исследовать отключены, если элемент не выбран в элементе ListBox .

Читайте также: