Чтобы выбрать объекты файловой системы, которые не находятся в строке, используйте клавишу

Обновлено: 02.07.2024

Класс FileSystemLocal представляет собой простой интерфейс для некоторых методов os и os.path. Например, метод listdir() в FileSystemLocal — это просто вызов os.listdir(). Таким образом, это не относится к какому-либо каталогу, это относится только к локальной ОС и os.path . Так что технически ответ отрицательный.

Возможно, вы могли бы определить свой собственный подкласс FileSystemLocal, отвечающий вашим требованиям.

Вот пример расширения FileSystemLocal, использующего определенный каталог:

Это можно использовать как:

  • FileSystemLocalDir во многом основан на FileSystemLocal .
  • dir= в конструкторе задает каталог по умолчанию, к которому обращаются все методы FileSystemLocalDir .
  • Если аргумент dir= не указан, FileSystemLocalDir эквивалентен FileSystemLocal .
  • Если аргумент любого метода FileSystemLocalDir начинается с / , он рассматривается как абсолютный путь, а предоставленный каталог по умолчанию игнорируется (это результат использования os.join ).

Я не могу каким-то образом использовать os.listdir с определенным каталогом? и таким образом определить мой собственный подкласс FileSystemLocal

Большое спасибо! сейчас реализую! Другой вопрос, связанный с этим и с проектом, который я создаю, есть идеи, как отправить объект FileSystemLocal через сокет?

Не знаю, как можно отправить его через сокет. Но имейте в виду, что FileSystemLocal основан на библиотеке ОС Python, поэтому независимо от того, где создается FileSystemLocal, он будет предоставлять информацию только о файловой системе, в которой он находится. Если вы создадите его на компьютере А и используете на компьютере А, он расскажет вам о файлах на компьютере А. Если вы смогли отправить этот FileSystemLocal через сокет на компьютер B и запустить его на компьютере B, он расскажет вам только о файлах на компьютере B.

Я имел в виду создание этого объекта: ObjectProperty(FileSystemLocal(), baseclass=FileSystemAbstract), а затем отправить его таким образом, чтобы он отображал компьютер A на компьютере B. Будет ли это работать таким образом? и если да, то есть идеи, как его отправить?

FileSystemObject, также называемый FSO, предоставляет простую объектную модель для доступа к файловой системе компьютера. Вам просто нужно создать экземпляр FileSystemObject в VBA, после чего вы сможете создавать файлы, читать файлы, удалять файлы, перебирать папки и выполнять множество других операций с файловой системой вашего компьютера.

FileSystemObject присутствует в библиотеке времени выполнения сценариев Microsoft, т. е. Scrrun.dll . Эта DLL поддерживает создание и манипулирование файлами с использованием объекта TextStream, поэтому FSO не поддерживает работу с двоичными файлами.

Оглавление

Использование объекта файловой системы

FileSystemObject можно использовать для нескольких задач, таких как:

  • Создание, открытие, чтение, запись и удаление текстовых файлов.
  • Создание, изменение и удаление папок.
  • Итерация файлов и папок.
  • Копирование и перемещение файлов или папок.
  • Проверка существования местоположения (пути к файлу).

Доступ к FileSystemObject

ОбъектОписание
ДискЭтот объект позволяет для получения информации о диске, подключенном к вашей системе. Например, он может сообщить вам доступное место на диске, его логическое имя и т. д. Обратите внимание, что объект диска, на который мы здесь ссылаемся, не обязательно означает жесткий диск, это может быть CD-ROM, флэш-накопитель. , ОЗУ или даже логически подключенный диск через локальную сеть.
ПапкаЭтот объект позволяет создавать, удалять, перемещать или запрашивать иерархию папок. .
ФайлЭтот объект позволяет создавать, удалять, перемещать или запрашивать файл.
TextStreamОбъект TextStream позволяет читать или записывать текстовые файлы.

Итак, схематически FileSystemObject может быть показан как:

FileSystemObject Diagram

Обратите внимание, что FSO взаимодействует с большинством вышеперечисленных объектов опосредованно. Он просто непосредственно содержит коллекцию объектов для «Дисков». Каждый объект «Диск» в коллекции «Диски» содержит цепочку объектов «Папка». И каждый объект «Папка» содержит коллекцию «Файл».

Чтобы сделать его более понятным, давайте скажем так: объект FileSystemObject содержит три основных метода для извлечения (чтения) определенной информации о дисках, папках или файлах. Это методы GetDrive , GetFolder и GetFile соответственно. Теперь предположим, что вам нужно найти размер определенного файла, поэтому вы создадите экземпляр метода GetFile, а затем получите его свойство size.

Примечание: GetDrive , GetFolder и GetFile — не единственные методы внутри FSO, я только что использовал их для объяснения вещей. В следующем разделе мы увидим все методы, содержащиеся в FileSystemObject.

Методы FSO

В таблице ниже приведены подробные сведения о различных методах FileObjectSystem и задачах, которые они выполняют:

МетодОписание
GetDrive, GetFolder и GetFileЭти методы используются для получения информации о Диске, Папках и Файлах соответственно.
CreateFolder и CreateTextFileПомогают в создании новых папок или файлов.< /td>
DeleteFile и DeleteFolderПомогает удалить существующие файлы или папки.
CopyFile и CopyFolder td>Эти методы помогают копировать файлы или папки из одного места в другое.
MoveFile и MoveFolderЭти методы помогают перемещать файлы или папки из одного места в другое.

Создание объекта FileSystemObject в VBA. В этом разделе мы рассмотрим две вещи:

  • Создание ссылки на библиотеку времени выполнения сценариев Microsoft, например Scrrun.dll
  • Создание объекта FSO.

Создание ссылки на библиотеку времени выполнения сценариев Microsoft

Чтобы создать ссылку на библиотеку времени выполнения сценариев Microsoft, выполните следующие действия:

  • Прежде всего откройте редактор VBA, нажав «Alt + F11».

 Добавление ссылки FSO на vba

  • Затем перейдите в «Инструменты» > «Справочник», как показано выше.

Adding-FileSystemObject-reference-to-vba-3

  • Откроется справочное окно. Здесь выберите и проверьте запись «Среда выполнения сценариев Microsoft» и нажмите «ОК».
  • Теперь добавлена ​​ссылка на библиотеку Microsoft Scripting Runtime Library.

Создание объекта FSO

Создать объект FSO очень просто, для этого выполните следующие шаги:

  • В редакторе VBA выберите «Вставка» > «Модуль».

Создание объекта FSO

  • Теперь в окне модуля введите «Public FSO As New FileSystemObject».
  • Это создаст объект FileSystemObject с именем FSO.

После этого вы можете просто получить доступ к методам FileSystemObject с помощью объекта FSO.

6 практических примеров доступа к FileSystemObject

Теперь давайте перейдем к некоторым практическим примерам FSO:

Пример 1. Используйте FSO для определения общего свободного места на диске.

Ниже приведен код для этого:

Объяснение. В этом коде мы сначала создали объект Drive с помощью метода GetDrive, а затем использовали его свойство FreeSpace для получения свободного места.

Наконец, мы отобразили свободное место с помощью окна сообщения.

Обратите внимание, что есть два свойства для получения свободного места на диске, т. е. drv.FreeSpace и drv.AvailableSpace .

Пример 2. Проверка существования папки. Если папка не существует, создайте ее.

Ниже приведен код:

Объяснение. В коде мы использовали функцию InputBox, чтобы получить путь к папке от пользователя. После этого, используя оператор If вместе с методом FolderExists, мы проверили, присутствует ли эта папка или нет. Если папки нет, мы создаем эту папку с помощью метода CreateFolder.

Примечание. Метод CreateFolder создает только одну папку за раз. Итак, если вы укажете ему аргумент «C:\Folder1\Folder2\Folder3», тогда он создаст только Folder3 внутри Folder2. Но если Folder2 не существует, он выдаст ошибку «Путь не найден».

Пример 3. Напишите код с помощью FSO для копирования папки из одного места в другое.

Ниже приведен код для этого:

'Создание общедоступного FSO FileSystemObject в качестве нового подкаталога FileSystemObject CopyFolder() FSO.CopyFolder "C:\Source-Folder\", "D:\Destination-Folder\", True MsgBox "Копирование выполнено!" Конец подписки

Объяснение: в коде мы использовали метод CopyFolder FSO, этот метод принимает три аргумента:

  • Исходный путь
  • Путь назначения
  • Логический аргумент для указания перезаписи существующего.

Пример 4. Использование FileSystemObject для извлечения каталога Temp, системной папки и папки Windows.

Для этого мы можем использовать следующий код:

FSO_Example-5

Объяснение: в коде мы использовали метод GetSpecialFolder FSO, этот метод принимает один числовой аргумент, т. е. 0-2.

  • FSO.GetSpecialFolder(0) — получает путь к папке Windows.
  • FSO.GetSpecialFolder(1) — извлекает путь к системной папке.
  • FSO.GetSpecialFolder(2) — извлекает путь к локальной временной папке.

Пример 5. Создайте текстовый файл, напишите в него содержимое, затем прочитайте файл и, наконец, удалите файл.

Ниже приведен код для этого:

Объяснение. Этот код сначала создает текстовый файл, добавляет в него содержимое, затем читает его, отображает в окне сообщения и, наконец, удаляет этот файл.

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

Следующий код может выполнить эту задачу:

Объяснение. В этом коде мы создали объект Folder, а затем перебираем все его файлы, используя цикл For Each. Из файлового объекта мы извлекаем свойства Name, Size и DateLastModified и, наконец, записываем их на активный рабочий лист. Итак, это все о FileSystemObject и о том, как его использовать в VBA. Делитесь своими комментариями по теме.

Подпишитесь и станьте частью нашей семьи, насчитывающей более 15 000 человек!

Теперь подпишитесь на Excel Trick и получите бесплатную копию нашей электронной книги "200+ ярлыков Excel" (формат для печати), которая резко повысит вашу продуктивность.

В следующем коде показано, как объект FileSystemObject используется для возврата объекта TextStream, из которого можно читать или записывать:

В примере кода:

  • Функция CreateObject возвращает FileSystemObject ( fs ).
  • Метод CreateTextFile создает файл как объект TextStream ( a ).
  • Метод WriteLine записывает строку текста в созданный текстовый файл.
  • Метод Close очищает буфер и закрывает файл.

Методы

< /tr> < /tr> < tr> < /tbody>
Метод Описание
BuildPath Добавляет имя к существующему пути.
CopyFile Копирует один или несколько файлов из одного места в другое.
CopyFolder Копирует одну или несколько папок из одного места в другое. .
CreateFolder Создает новую папку.
CreateTextFile Создает текстовый файл и возвращает объект TextStream, который может использоваться для чтения или записи в файл.
DeleteFile Удаляет один или несколько указанных файлов.
DeleteFolder Удаляет одну или несколько указанных папок.
DriveExists Проверяет, существует ли указанный диск.
FileExists Проверяет, существует ли указанный файл.
FolderExists Проверяет, существует ли указанная папка.
GetAbsolutePathName Возвращает полный путь от корня диска для указанного пути.
GetBaseName Возвращает базовое имя указанного файла или папки.
GetDrive Возвращает объект Drive, соответствующий диску по указанному пути.
GetDriveName Возвращает имя диска по указанному пути.
GetExtensionName Возвращает расширение файла для последнего компонента по указанному пути.
GetFile Возвращает объект File для указанного пути.
GetFileName Возвращает имя файла или имя папки для последнего компонента по указанному пути.< /td>
GetFolder Возвращает объект Folder для указанного пути.
GetParentFolderName Возвращает имя родительской папки последний компонент в указанном пути.
GetSpecialFolder Возвращает путь к некоторым специальные папки.
GetTempName Возвращает случайно сгенерированное временное файл или папку.
Переместить Перемещает указанный файл или папку из одного места в другое.
MoveFile Перемещает один или несколько файлов из одного места в другое.
MoveFolder Перемещает одну или несколько папок из одного места в другое.
OpenAsTextStream Открывает указанный файл и возвращает объект TextStream, который можно использовать для чтения, записи или добавления в файл.
Оп enTextFile Открывает файл и возвращает объект TextStream, который можно использовать для доступа к файлу.
WriteLine Записывает указанную строку и символ новой строки в файл TextStream.

Свойства

< td style="text-align: left;">Возвращает информацию о типе файла или папки (например, для файлов, оканчивающихся на .TXT, возвращается "Текстовый документ"). < /tbody>
Свойство Описание
Диски Возвращает коллекцию всех объектов "Диск" на компьютере.
Имя Задает или возвращает имя указанного файла или папка.
Путь Возвращает путь для указанного файла, папки или диска.
Размер Для files, возвращает размер указанного файла в байтах; для папок возвращает размер в байтах всех файлов и подпапок, содержащихся в папке.
Тип

См. также

Поддержка и обратная связь

Есть вопросы или отзывы об Office VBA или этой документации? См. раздел Поддержка и отзывы об Office VBA, чтобы узнать, как получить поддержку и оставить отзыв.

В этой статье описывается, как предоставить файловой системе SQL Server Database Engine доступ к расположению, в котором хранятся файлы базы данных. Служба компонента Database Engine должна иметь разрешение файловой системы Windows на доступ к папке с файлами, в которой хранятся файлы базы данных. Разрешение на расположение по умолчанию настраивается во время установки. Если вы поместите файлы базы данных в другое место, вам может потребоваться выполнить следующие действия, чтобы предоставить компоненту Database Engine разрешение на полный доступ к этому расположению.

Начиная с SQL Server 2012 (11.x), разрешения назначаются идентификатору SID каждой службы для каждой из ее служб. Эта система помогает обеспечить изоляцию служб и глубокую защиту. SID для каждой службы является производным от имени службы и уникален для каждой службы. В статье Настройка учетных записей служб Windows и разрешений описывается SID для каждой службы и приводятся имена в разделе «Привилегии и права Windows». Это SID для каждой службы, которому должно быть назначено разрешение на доступ к местоположению файла.

Предоставить разрешение файловой системе для SID каждой службы

С помощью проводника Windows перейдите к папке файловой системы, в которой хранятся файлы базы данных. Щелкните правой кнопкой мыши папку файловой системы и выберите "Свойства".

На вкладке "Безопасность" выберите "Изменить", а затем "Добавить".

В диалоговом окне "Выбрать пользователей, компьютер, учетную запись службы или группы" выберите "Расположения", в верхней части списка расположений выберите имя своего компьютера и нажмите кнопку "ОК".

В поле Введите имена объектов для выбора введите имя SID для каждой службы. Чтобы найти его, см. раздел Настройка учетных записей служб Windows и разрешений. (Для компонента Database Engine для имени SID службы используйте NT SERVICE\MSSQLSERVER для экземпляра по умолчанию или NT SERVICE\MSSQL$InstanceName для именованного экземпляра.)

Выберите Проверить имена, чтобы подтвердить ввод. (Если проверка не пройдена, может быть указано, что имя не найдено. Когда вы нажмете кнопку «ОК», появится диалоговое окно «Найдены несколько имен». Теперь выберите имя SID для каждой службы, MSSQLSERVER или NT SERVICE\MSSQL$InstanceName, и затем выберите "ОК". Нажмите "ОК" еще раз, чтобы вернуться в диалоговое окно "Разрешения".)

В поле Имена групп или пользователей выберите имя SID для каждой службы, а затем в поле Разрешения для установите флажок Разрешить для полного доступа.

Выберите «Применить», а затем дважды нажмите «ОК», чтобы выйти.

Тип oid в настоящее время реализован как четырехбайтовое целое число без знака. Следовательно, он недостаточно велик, чтобы обеспечить уникальность всей базы данных в больших базах данных или даже в больших отдельных таблицах. Таким образом, использование столбца OID созданной пользователем таблицы в качестве первичного ключа не рекомендуется. OID лучше всего использовать только для ссылок на системные таблицы.

Сам по себе тип oid имеет мало операций, которые нельзя сравнивать. Однако его можно привести к целому числу, а затем манипулировать с помощью стандартных целочисленных операторов. (Остерегайтесь возможной путаницы между подписанными и неподписанными, если вы сделаете это.)

Псевдонимы OID не имеют собственных операций, за исключением специализированных процедур ввода и вывода. Эти подпрограммы могут принимать и отображать символические имена для системных объектов, а не необработанные числовые значения, которые использовал бы тип oid. Типы псевдонимов позволяют упростить поиск значений OID для объектов. Например, чтобы проверить строки pg_attribute, относящиеся к таблице mytable, можно написать

Хотя это выглядит не так уж и плохо само по себе, это все же слишком упрощено. Для выбора правильного OID потребуется гораздо более сложный подвыбор, если в разных схемах есть несколько таблиц с именами mytable. Преобразователь входных данных regclass выполняет поиск в таблице в соответствии с настройкой пути к схеме, поэтому он автоматически выполняет «правильную работу». Точно так же приведение OID таблицы к regclass удобно для символьного отображения числового OID.

Имя Ссылки Описание Пример значения
oid любой числовой идентификатор объекта 564182
regproc pg_proc функция имя сумма
regprocedure pg_proc< /tt> функция с типами аргументов sum(int4)
regoper pg_operator имя оператора +
regoperator pg_operator оператор с типами аргументов *(целое число,целое число) или -(НЕТ,целое число)
regclass pg_class имя отношения pg_type
regtype pg_type имя типа данных целое число

Все типы псевдонимов OID принимают имена, уточненные схемой, и будут отображать имена, уточненные схемой, на выходе, если объект не будет найден в текущем пути поиска без уточнения. Псевдонимы regproc и regoper будут принимать только уникальные входные имена (не перегруженные), поэтому их использование ограничено; для большинства случаев более подходит regprocedure или regoperator. Для regoperator унарные операторы обозначаются записью NONE вместо неиспользуемого операнда.

Дополнительным свойством типов псевдонимов OID является то, что если константа одного из этих типов появляется в сохраненном выражении (например, в выражении или представлении по умолчанию для столбца), она создает зависимость от объекта, на который делается ссылка. Например, если столбец имеет выражение по умолчанию nextval('my_seq'::regclass), PostgreSQL понимает, что выражение по умолчанию зависит от последовательности my_seq; система не позволит удалить последовательность без предварительного удаления выражения по умолчанию.

Третий тип идентификатора, используемый системой, — cid, или идентификатор команды. Это тип данных системных столбцов cmin и cmax. Идентификаторы команд также являются 32-битными величинами.

Конечным типом идентификатора, используемым системой, является tid или идентификатор кортежа (идентификатор строки). Это тип данных системного столбца ctid. Идентификатор кортежа – это пара (номер блока, индекс кортежа в блоке), определяющая физическое расположение строки в ее таблице.

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