Vba прочитать атрибуты файла
Объект Folder позволяет выполнять различные манипуляции с каталогами, например, копировать или удалить каталог. Создать объект позволяет метод GetFolder() объекта FileSystemObject . В параметре указывается путь к каталогу. Путь может быть абсолютным или относительным. При указании относительного пути полный путь определяется с учетом местоположения текущего рабочего каталога и текущего диска. Пример создания объекта:
Чтение и запись файлов в кодировке UTF-16
Все строки, которые мы записывали ранее, сохранялись в файле в кодировке, принятой в системе по умолчанию. В моем случае в кодировке Windows-1251. Если необходимо записать данные в кодировке UTF-16 или прочитать данные, то можно воспользоваться функцией StrConv() (см. разд. 6.8) для преобразования кодировки. В качестве примера запишем данные в фай, а затем прочитаем и выведем их (листинг 12.3).
Листинг 12.2. Чтение и запись файлов в кодировке UTF-16
Обратите внимание на инструкцию
Комбинация символов с кодами 255 и 254 является меткой порядка байтов (сокращенно BOM (Byte Order Mark)). Эта метка является обязательной для кодировки UTF-16. При чтении данных мы пропускаем их и начинаем чтение с позиции 3 .
Получение атрибутов файла и содержимого текстового файла
Создайте обработчик событий нажатия Click для кнопки examineButton , дважды щелкнув этот элемент управления в форме.
Добавьте следующий код в обработчик событий Click .
Этот код проверяет, выбран ли элемент в элементе ListBox . Затем он получает запись пути к файлу из элемента ListBox . Метод FileExists позволяет проверить, существует ли файл.
Путь к файлу передается как аргумент методу GetTextForOutput , который добавляется в следующем шаге. Этот метод возвращает строку, содержащую информацию о файле. Информация о файле отображается в элементе MessageBox.
Добавьте приведенный ниже метод GetTextForOutput .
Метод GetFileInfo используется в коде для получения параметров файла. Параметры файла добавляются в StringBuilder.
Метод OpenTextFileReader считывает содержимое файла в StreamReader. Первая строка содержимого файла извлекается из StreamReader и добавляется в StringBuilder .
Выберите файл в ListBox , а затем нажмите кнопку ListBox . В окне MessageBox будет выведена информация о файле.
Остановите работу приложения.
Создание каталога
Создать новый каталог позволяет метод CreateFolder() объекта FileSystemObject . В параметре указывается абсолютный или относительный путь к каталогу. Метод возвращает ссылку на объект Folder . Если каталог уже существует, то генерируется ошибка. Пример создания каталога folder2 :
Выбор папки и перечисление файлов в ней
Создайте обработчик событий нажатия Click для кнопки browseButton , дважды щелкнув этот элемент управления в форме. Откроется редактор кода.
Добавьте следующий код в обработчик событий Click .
FolderBrowserDialog1.ShowDialog Вызов открывает диалоговое окно FolderBrowserDialog1.ShowDialog . После нажатия пользователем кнопки ОК свойство отправляется в качестве аргумента ListFiles в метод, который добавляется на следующем шаге.
Добавьте приведенный ниже метод ListFiles .
Этот код сперва очищает элемент ListBox.
Затем метод GetFiles возвращает коллекцию строк — по одной для каждого файла в каталоге. Метод GetFiles принимает аргумент шаблона поиска, чтобы извлечь файлы, соответствующие определенному шаблону. В этом примере возвращаются только файлы с расширением TXT.
Строки, возвращаемые GetFiles методом, затем добавляются в GetFiles .
Элемент ListBox содержит список TXT-файлов в выбранной папке.
Остановите работу приложения.
Открытие и закрытие файла
Прежде чем работать с файлом, необходимо создать объект файла с помощью инструкции Open . Инструкция имеет следующий формат:
В параметре указывается путь к файлу. Путь может быть абсолютным или относительным. При указании относительного пути путь определяется с учетом местоположения текущего рабочего каталога, возвращаемого функцией CurDir() , а также текущего диска (сменить текущий диск позволяет процедура ChDrive() ). Чтобы получить путь к папке, в которой находится файл с рабочей книгой, в Excel можно воспользоваться свойством Path объекта ThisWorkbook . Пример создания файла:
Параметр может принимать следующие значения:
- Input — чтение в последовательном режиме. Если файл не существует, то генерируется ошибка;
- Output — запись в последовательном режиме. Если файл не существует, то он будет создан. Если файл существует, то он будет перезаписан;
- Append — запись в последовательном режиме. Если файл не существует, то он будет создан. Запись осуществляется в конец файла. Содержимое файла не удаляется;
- Random — чтение и запись в произвольном режиме. Если файл не существует, то он будет создан. Содержимое файла не удаляется;
- Binary — чтение и запись в бинарном режиме. Если файл не существует, то он будет создан. Содержимое файла не удаляется.
Параметр задает тип операции с открываемым файлом. Допустимые значения:
- Read — только чтение;
- Write — только запись;
- Read Write — чтение и запись.
Необязательный параметр может принимать следующие значения:
- Shared — другой процесс может читать из файла и писать в файл;
- Lock Read — другой процесс не сможет читать из файла;
- Lock Write — другой процесс не сможет писать в файл;
- Lock Read Write — другой процесс не сможет читать из файла и писать в файл.
В необязательном параметре указывается целое число до 32 767 . При использовании произвольного режима значение задает длину записи, а при использовании последовательного режима — размер буфера. Значение игнорируется в бинарном режиме.
Для закрытия файла используется инструкция Close . Формат инструкции:
Инструкция закрывает файлы, дескрипторы которых перечислены через запятую. Если дескрипторы не указаны, то закрываются все открытые файлы. При завершении программы все открытые файлы автоматически закрываются.
Файлы могут быть открыты в трех режимах: последовательном, произвольном и бинарном. Рассмотрим эти режимы подробно.
Использование текущего каталога
Создайте обработчик событий для события Form1_Load , дважды щелкнув форму.
Добавьте в обработчик событий приведенный ниже код.
Этот код задает текущий каталог в качестве каталога по умолчанию для обозревателя папок.
Запустите приложение. При первом нажатии кнопки Обзор открывается диалоговое окно Выбор папки с текущим каталогом.
Остановите работу приложения.
Получение информации о каталоге
Получить информацию о каталоге позволяют следующие свойства объекта Folder :
- Size — общий размер всех файлов и подкаталогов;
- Path — полный путь к каталогу (например, D:\VBA\folder1 );
- ShortPath — короткий путь к каталогу;
- Name — имя каталога без пути;
- ShortName — короткое имя каталога;
- Drive — имя диска (например, D: );
- Type — тип каталога;
- ParentFolder — ссылка на объект родительского каталога;
- IsRootFolder — содержит значение True , если каталог является корневым и False — в противном случае;
- SubFolders — ссылка на семейство Folders с объектами подкаталогов;
- Files — ссылка на семейство Files с объектами файлов данного каталога;
- DateCreated — дата и время создания каталога;
- DateLastAccessed — дата и время последнего доступа к каталогу;
- DateLastModified — дата и время последнего изменения каталога;
- Attributes — позволяет определить какие атрибуты установлены для каталога. Содержит сумму следующих значений:
- 0 — Normal — обычный;
- 1 — ReadOnly — каталог доступен только для чтения;
- 2 — Hidden — скрытый каталог;
- 4 — System — системный каталог;
- 16 — Directory — путь указывает на каталог;
- 32 — Archive — архивный;
- 64 — Alias — псевдоним;
- 128 — Compressed — сжатый.
Проверить, установлен атрибут или нет, позволяет оператор And . Если атрибут установлен, то результатом операции будет ненулевое значение. Если этому свойству присвоить новое значение, то атрибуты каталога (доступные для записи) будут изменены.
Пример получения и изменения атрибутов каталога показан в листинге 13.2.
Листинг 13.2. Получение и изменение атрибутов каталога
Выборочное включение элементов управления
Добавьте приведенный ниже метод SetEnabled .
Метод SetEnabled включает и отключает элементы управления в зависимости от того, выбран ли элемент в элементе ListBox .
Создайте обработчик событий SelectedIndexChanged для элемента filesListBox , дважды щелкнув элемент управления ListBox в форме.
Добавьте вызов метода SetEnabled в новый обработчик событий filesListBox_SelectedIndexChanged .
Добавьте вызов метода SetEnabled в конце обработчика событий browseButton_Click .
Добавьте вызов метода SetEnabled в конце обработчика событий Form1_Load .
Запустите приложение. Флажок сохранить результаты и кнопка проверить отключены, если элемент не выбран в .
Ниже приведен полный пример.
Синтаксис
объект. Атрибуты [= newattributes ]
Свойство Attributes состоит из следующих частей:
Часть | Описание |
---|---|
object | Обязательно. Всегда имя объекта File или Folder . |
newattributes | Необязательное свойство. Если аргумент newattributes предоставляется, он является новым значением атрибутов заданного объекта. |
Проверка существования каталога
Проверить существование каталога позволяет метод FolderExists() объекта FileSystemObject . В параметре указывается путь к каталогу. Метод возвращает значение True , если каталог существует и False — в противном случае. Пример:
Чтение и запись в последовательном режиме
Последовательный режим применяется при указании значений Input , Output и Append после ключевого слова For в инструкции Open . Запись в файл производится с помощью инструкции Write . Формат инструкции:
В параметре указывается номер файла, который использовался при открытии файла. В параметре задаются записываемые значения через запятую, точку с запятой или через пробел (эквивалентно указанию точки с запятой). Если точка с запятой указывается в конце инструкции Write , то следующее выводимое значение будет вставляться на одной строке с предыдущим выводом через запятую, а не на новой строке. Если параметр не указан, то вставляется пустая строка. Значения записываются в файл в следующих форматах:
Пример записи в файл:
Чтение из файла производится с помощью инструкции Input . Формат инструкции:
В параметре указывается номер файла, который использовался при открытии файла. Во втором параметре задается список переменных, в которых сохранятся считываемые значения. Например, считать данные, записанные в предыдущем примере, можно следующим образом:
Обратите внимание на четвертую инструкцию. Ранее мы записывали строку, в состав которой входит двойная кавычка. При считывании одна строка разбивается на две подстроки. В результате переменная v2 будет иметь значение "При" , а переменная v3 — значение "мер" .
Для записи в файл можно воспользоваться также инструкцией Print . Формат инструкции:
В параметре указывается номер файла, который использовался при открытии файла. В параметре задаются записываемые значения через запятую, точку с запятой или через пробел (эквивалентно указанию точки с запятой). Если указывается запятая, то следующее значение выводится в начале следующей зоны (по умолчанию начало зоны расположено в каждом 14-ом столбце), а если точка с запятой — то следующее значение выводится сразу после предыдущего:
Если точка с запятой указывается в конце инструкции Print , то следующее выводимое значение будет вставляться на одной строке с предыдущим выводом, а не на новой строке. Если параметр не указан, то вставляется пустая строка. Значения записываются в файл в следующих форматах:
- строки без двойных кавычек;
- вещественные числа с разделителем в виде запятой;
- дата и время в коротком формате;
- логические значения True и False в виде строк True и False соответственно;
- значение Null в виде строки Null .
Пример записи в файл:
Второй параметр может содержать следующие функции:
- Spc() — позволяет вставить указанное количество пробелов. Пример:
- Tab[()] — если функция указывается без параметра, то происходит переход в начало следующей зоны (эквивалентно вставке запятой между значениями):
Параметр задает номер столбца, с которого начинается вывод:
Прочитать файл, записанный с помощью инструкции Print , позволяет инструкция Line Input . Чтение производится построчно при каждом вызове инструкции. Формат инструкции:
Прочитаем две строки из записанного ранее файла:
Чтобы прочитать все строки из файла следует воспользоваться функцией EOF() . Функция возвращает значение True , если был достигнут конец файла, и False — в противном случае. Вывести все строки из файла позволяет следующий код:
Инструкция Width позволяет указать предпочитаемую ширину строки. Формат инструкции:
Параметр может содержать значения в диапазоне от 0 до 255 . Если указано значение 0 , то ширина не ограничена. Если длина строки больше указанного значения, то значение игнорируется и строка выводится полностью. Пример указания ширины, равной трем символам:
Методы
Метод | Описание |
---|---|
Копировать | Копирует указанный файл из одного расположения в другое. |
Удаление | Удаляет указанный файл. |
Move | Перемещает указанный файл из одного расположения в другое. |
OpenAsTextStream | Открывает указанный файл и возвращает объект TextStream для доступа к файлу. |
Создание каталога
Создать новый каталог позволяет метод CreateFolder() объекта FileSystemObject . В параметре указывается абсолютный или относительный путь к каталогу. Метод возвращает ссылку на объект Folder . Если каталог уже существует, то генерируется ошибка. Пример создания каталога folder2 :
Чтение и запись в произвольном режиме
Произвольный режим применяется при указании значения Random после ключевого слова For в инструкции Open . Длина записи в произвольном режиме является фиксированной и задается с помощью параметра (целое число до 32 767 ) в инструкции Open . При чтении и записи длина должна быть указана одинаковой. Запись в файл производится с помощью инструкции Put . Формат инструкции:
В параметре указывается номер файла, который использовался при открытии файла. В параметре задается номер позиции (нумерация начинается с 1 ) в которую производится запись. Если параметр не указан, то запись производится в следующую позицию после текущей позиции. Параметр задает записываемое значение. Если длина значения больше длины, указанной в параметре , то генерируется ошибка. Если производится запись строки произвольной длины, то значение в параметре должно быть на 2 байта больше фактической длины строки. Пример записи в файл:
Чтение файла производится с помощью инструкции Get . Формат инструкции:
В параметре указывается номер файла, который использовался при открытии файла. В параметре задается номер позиции (нумерация начинается с 1 ) из которой производится чтение. Если параметр не указан, то читаются данные из следующей позиции после текущей позиции. Пример:
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
В этом пошаговом руководстве приводятся основные сведения о файловом вводе-выводе в Visual Basic. В нем описывается создание небольшого приложения, перечисляющего текстовые файлы в каталоге и анализирующего их. Для каждого выбранного текстового файла приложение предоставляет атрибуты файла и первую строку содержимого. Кроме того, предоставляется возможность записать информацию в файл журнала.
Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Персонализация среды IDE.
Коллекции
Сбор | Описание |
---|---|
Файлы | Возвращает коллекцию всех файлов в указанной папке. |
См. также
Семейство Folders
Семейство Folders содержит несколько объектов Folder . Доступ к объекту в коллекции выполняется с помощью метода Item() или с помощью цикла For Each. Next . Получить количество объектов в коллекции позволяет свойство Count . Можно также добавить новый объект в коллекцию, передав название каталога в метод Add() . Метод возвращает ссылку на объект Folder .
С помощью свойства SubFolders объекта Folder можно получить ссылку на коллекцию всех подкаталогов в каталоге. В качестве примера выведем названия всех подкаталогов:
Статьи по Visual Basic for Applications (VBA)
Помощь сайту
Yandex-деньги: 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов
В следующем коде иллюстрируется получение объекта File и просмотр одного из его свойств.
Полный пример с использованием System.IO
Устанавливает или возвращает атрибуты файлов или папок. Доступ для чтения/записи или только для чтения в зависимости от атрибута.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Очень часто нужно сохранить какие-либо данные. Для этого существует три способа: сохранение в файл, сохранение в базу данных и сохранение в реестр Windows. Первый способ используется при сохранении информации небольшого объема. Если объем велик, то лучше (и удобнее) воспользоваться базой данных. В реестр Windows обычно сохраняют какие-либо настройки приложения.
Чтение и запись в бинарном режиме
Бинарный режим применяется при указании значения Binary после ключевого слова For в инструкции Open . Длина записи в бинарном режиме является фиксированной и равна одному байту. Если указано значение в параметре , то это значение игнорируется.
Чтение и запись в бинарном режиме осуществляется точно также, как и при использовании произвольного режима. Прочитать данные из файла позволяет инструкция Get , а записать данные инструкция Put . В параметре в этих инструкциях указывается порядковый номер байта.
Пример записи строки в файл:
Пример чтения строки из файла:
В этом примере мы воспользовались функцией LOF() , которая позволяет получить длину файла в байтах. Чтобы считать данные из бинарного файла в строковую переменную необходимо в переменной создать строку такого же размера. В данном случае мы с помощью функции Space() создаем строку из такого же количества символов, что и размер файла. Обратите внимание на то, что использовать функцию EOF() в бинарном режиме нельзя, так как она всегда возвращает значение False .
Для чтения бинарного файла можно также воспользоваться следующими функциями:
Запишем строку в бинарный файл, а затем считаем ее с помощью функции Input() :
Комментарии
Следующий код иллюстрирует использование свойства Attributes с файлом.
Добавление записи в журнал
В конец обработчика событий examineButton_Click добавьте приведенный ниже код.
Код задает путь к файлу журнала, чтобы файл журнала помещался в тот же каталог, где находится выбранный файл. Запись журнала должна содержать текущие дату и время, а далее информацию о файле.
Метод WriteAllText, которому передается аргумент append со значением True , используется для создания записи в журнале.
Запустите приложение. Перейдите к текстовому файлу, выберите его в ListBox , установите флажок ListBox и нажмите кнопку проверить. Проверьте, добавлена ли запись в файл log.txt .
Остановите работу приложения.
Settings
Аргумент newattributes может иметь любое из следующих значений или логическое сочетание следующих значений.
Константа | Значение | Описание |
---|---|---|
Normal | 0 | Обычный файл. Атрибуты не заданы. |
ReadOnly | 1 | Файл только для чтения. Атрибут "чтение/запись". |
Hidden | 2 | Скрытый файл. Атрибут "чтение/запись". |
Система | 4 | Системный файл. Атрибут "чтение/запись". |
Volume | 8 | Метка тома дискового устройства. Атрибут "только чтение". |
Directory | 16 | Папка или каталог. Атрибут "только чтение". |
Archive | 32 | Файл изменен после последнего резервного копирования. Атрибут "чтение/запись". |
Alias | 1024 | Ссылка или ярлык. Атрибут "только чтение". |
Сжатый | 2048 | Сжатый файл. Атрибут "только чтение". |
Чтение и запись файлов в кодировке UTF-8
Работа с файлами в кодировке UTF-8 выполняется сложнее. В этом случае необходимо воспользоваться функциями MultiByteToWideChar() и WideCharToMultiByte() , входящими в состав Win32 API. Чтобы это стало возможным, нужно в самом начале модуля вставить следующий код:
Теперь мы можем пользоваться этими функциями для чтения и записи файлов в кодировке UTF-8:
Статьи по Visual Basic for Applications (VBA)
Помощь сайту
Yandex-деньги: 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов
Манипулирование каталогами
Для манипулирования каталогами предназначены следующие методы объекта Folder :
- CreateTextFile([, [, ]]) — создает новый файл в каталоге. В параметре указывается название файла. Если в необязательном параметре указано значение True (значение по умолчанию), то существующий файл будет перезаписан, а если значение False — то при существовании файла генерируется ошибка. Если в необязательном параметре указано значение False (значение по умолчанию), то файл создается в кодировке ASCII, а если значение True — то в кодировке Unicode. Метод возвращает объект TextStream , с помощью которого производится дальнейшая работа с файлом. Пример создания и закрытия файла:
- Move — позволяет переместить или переименовать каталог:
Вместо метода Move() можно воспользоваться методом MoveFolder() объекта FileSystemObject . Формат метода:
Пример переименования каталога folder1 в folder3 :
Параметр может содержать подстановочные знаки в последнем компоненте пути;
- Copy [, ] — позволяет скопировать содержимое каталога в другой каталог. Если во втором параметре указано значение True (значение по умолчанию), то существующий каталог будет перезаписан, а если значение False — то генерируется ошибка. Пример:
Вместо метода Copy() можно воспользоваться методом CopyFolder() объекта FileSystemObject . Формат метода:
Пример копирования каталога folder3 в folder1 :
Параметр может содержать подстановочные знаки в последнем компоненте пути;
- Delete [] — удаляет каталог. Если в параметре указано значение True , то каталог удаляется даже в случае, если он доступен только для чтения. По умолчанию параметр имеет значение False . Пример:
Вместо метода Delete() можно воспользоваться методом DeleteFolder() объекта FileSystemObject . Формат метода:
Пример удаления каталога folder3 :
Перемещение указателя внутри файла
Каждый открытый файл поддерживает указатель на текущую позицию в файле. Для перемещения и манипулирования позицией указателя внутри файла используются следующие функции и процедуры:
Запишем строку в файл в бинарном режиме, а затем переместим указатель в начало файла и считаем содержимое файла посимвольно в строку (листинг 12.1).
Листинг 12.1. Перемещение указателя внутри файла
Свойства
Свойство | Описание |
---|---|
Attributes | Задает или возвращает атрибуты указанного файла. |
DateCreated | Возвращает дату и время создания указанного файла. |
DateLastAccessed | Возвращает дату и время последнего доступа к указанному файлу. |
DateLastModified | Возвращает дату и время последнего изменения указанного файла. |
Drive | Возвращает письмо диска, в котором находится указанный файл или папка. |
Название | Задает или возвращает имя указанного файла. |
ParentFolder | Возвращает объект папки для родителя указанного файла. |
Путь | Возвращает путь для указанного файла. |
ShortName | Возвращает короткое имя указанного файла (конвенция именования 8.3). |
ShortPath | Возвращает короткий путь указанного файла (конвенция именования 8.3). |
Размер | Возвращает размер указанного файла в bytes. |
Тип | Возвращает тип указанного файла. |
Создание проекта
В меню Файл выберите пункт Создать проект.
Откроется диалоговое окно Создание проекта .
В области Установленные шаблоны разверните узел Visual Basic и выберите элемент Windows. В середине области Шаблоны щелкните Приложение Windows Forms.
В поле имя введите , чтобы задать имя проекта, и нажмите кнопку ОК.
Visual Studio добавит проект в обозреватель решений, после чего откроется конструктор Windows Forms.
Добавьте в форму элементы управления из приведенной ниже таблицы и установите для их свойств соответствующие значения.
Читайте также: