Объект, не являющийся членом файловой системы
Обновлено: 21.11.2024
Проще, но и эффективнее для разработчиков, он предоставляет новую объектную модель для операций, связанных с файловой системой. Управляемое приложение может работать с файлами и каталогами, используя высокоуровневые методы, а не низкоуровневое понимание файловой системы. В этой статье представлен обзор методов и классов, содержащихся в пространстве имен System.IO.
Управление файлами
- Получать информацию и выполнять основные операции с файлами и каталогами
- Выполнять манипуляции с путями на основе строк
- Чтение и запись операций с потоками данных и файлами
Параметр пути, который требуется для всех методов, может указывать относительный или абсолютный путь. Относительный путь интерпретируется как относительный к текущему рабочему каталогу. Чтобы получить текущий рабочий каталог, вы используете метод GetCurrentDirectory, предоставляемый классом Directory. Любые вышеперечисленные методы, выполняющие операции записи, создадут указанный файл, если он не существует. Если файл существует, он будет перезаписан, если он не помечен как доступный только для чтения.
Если вы посмотрите на общий набор функций, предоставляемых обоими, класс FileInfo очень похож на статический класс File. Однако внутренняя реализация и программный интерфейс немного отличаются. Класс FileInfo работает с определенным файлом и требует, чтобы вы создали экземпляр класса, прежде чем обращаться к его методам и свойствам.
При создании экземпляра класса FileInfo вы указываете полное или частичное имя файла. Указанное вами имя файла проверяется только на соответствие имени, а не на существование. Если имя файла, которое вы указываете через конструктор класса, неприемлемо, создается исключение. Распространенными ошибками являются двоеточия в середине строки, недопустимые символы, пустые имена или имена длиннее 256 символов. В таблице 2 перечислены свойства класса FileInfo.
Методы, доступные для класса FileInfo, перечислены в таблице 3. Как видите, вы можете сгруппировать методы в две категории: методы для выполнения простых операций на основе потока с содержимым файла и методы для копирования или удаления. сам файл.
Класс FileInfo представляет собой логическую оболочку для системного элемента, который постоянно подвергается одновременным изменениям. Можете ли вы быть уверены, что информация, возвращаемая объектом FileInfo, всегда актуальна? Такие свойства, как Exists, Length, Attributes и LastAccessTime, могут легко содержать несогласованные значения, если другие пользователи могут одновременно вносить изменения.
При создании экземпляра FileInfo никакая информация фактически не считывается из файловой системы. Как только вы попытаетесь прочитать значение одного из вышеупомянутых критических свойств, класс вызывает метод Refresh, считывает текущее состояние файла и кэширует эту информацию. Однако из соображений производительности класс FileInfo не обновляет автоматически состояние объекта при каждом чтении свойств. Он делает это только при первом чтении одного из свойств.
Чтобы принудительно использовать это встроенное поведение, следует вызывать Refresh всякий раз, когда вам нужно прочитать актуальную информацию об атрибутах или длине файла. Необходимость обновления этих данных во многом зависит от потребностей вашего приложения. Под капотом метод Refresh вызывает функцию Win32 FindFirstFile и использует информацию, содержащуюся в возвращенной структуре WIN32_FIND_DATA, для заполнения свойств класса FileInfo. Вам нужно подумать, нужны ли приложению дополнительные затраты на вызов этой функции API.
Копирование и удаление файлов
Чтобы сделать копию текущего файла, вы можете использовать метод CopyTo, который поставляется с двумя перегруженными версиями. Обе перегрузки копируют файл в другой файл, но первая перегрузка просто запрещает перезапись, а другая дает вам возможность контролировать перезапись с помощью логического параметра.
Обратите внимание, что оба метода требуют, чтобы первым аргументом было имя файла. Это не может быть имя каталога, в который вы хотите скопировать файл. Если вы используете имя каталога, это будет имя выходного файла.
Свойство Attributes указывает атрибуты файловой системы данного файла. Для установки или чтения атрибута файл должен уже существовать и приложение должно иметь к нему доступ. Чтобы записать значение атрибута в файл, вы также должны иметь разрешение на запись, в противном случае возникает исключение FileIOPermissionAccess. Атрибуты файла выражаются с использованием типа FileAttributes. (См. Таблицу 4.)
Значения в таблице соответствуют значениям, определенным в Win32 SDK. Обратите внимание, что не все атрибуты применимы как к файлам, так и к каталогам. Вы задаете атрибуты файла с помощью кода, как показано во фрагменте кода ниже.
Обратите внимание, что вы не можете установить все атрибуты, перечисленные в таблице 4, с помощью свойства Attributes.Например, система присваивает атрибуты Зашифрованный и Сжатый только в том случае, если файл содержится в зашифрованной или сжатой папке. Точно так же вы можете назначить файлу точку повторной обработки или пометить его как разреженный файл только с помощью определенных функций API и только на томах NTFS.
Работа с каталогами
Для управления каталогом как объектом используется глобальный объект Directory или класс DirectoryInfo. Глобальный класс Directory предоставляет статические методы для создания, копирования и перемещения каталогов, а также для перечисления их файлов и подкаталогов. В таблице 5 перечислены методы класса Directory.
Обратите внимание, что метод Delete имеет две перегрузки. По умолчанию он удаляет только пустые каталоги и генерирует исключение IOException, если каталог не пуст или не помечен как доступный только для чтения. Вторая перегрузка включает логический аргумент, который, если задано значение true, позволяет методу рекурсивно удалить все дерево каталогов.
Класс DirectoryInfo представляет экземпляр класса Directory и работает с определенным каталогом.
Чтобы создать экземпляр класса DirectoryInfo, укажите полный путь. Как и для FileInfo, путь проверяется на непротиворечивость, но не на существование. Обратите внимание, что путь также может быть именем файла или именем в формате UNC. Если вы создаете объект DirectoryInfo, передавая имя файла, класс будет использовать каталог, содержащий указанный файл. В таблице 6 показаны свойства, доступные в классе DirectoryInfo.
Свойство Name классов файлов и каталогов доступно только для чтения, и его нельзя использовать для переименования соответствующего элемента файловой системы. Методы, которые вы можете использовать в классе DirectoryInfo, перечислены в таблице 7.
Метод GetFileSystemInfos возвращает массив объектов, каждый из которых указывает на файл или подкаталог, содержащийся в каталоге, привязанном к текущему объекту DirectoryInfo. В отличие от методов GetDirectories и GetFiles, которые просто возвращают имена подкаталогов и файлов в виде простых строк, GetFileSystemInfos возвращает строго типизированный объект для каждой записи — либо DirectoryInfo, либо FileInfo. Тип возвращаемого значения метода — массив объектов FileSystemInfo.
FileSystemInfo — это базовый класс как для FileInfo, так и для DirectoryInfo. GetFileSystemInfos имеет перегруженную версию, которая может принимать строку с критериями поиска.
Давайте посмотрим, как использовать классы файлов и каталогов для создания простого консольного приложения, отображающего содержимое каталога. Полный исходный код представлен в листинге 1.
GetFileSystemInfos принимает строку фильтра, которую можно использовать для установки некоторых критериев. Строка фильтра может содержать подстановочные знаки, такие как ? а также *. ? символ является заполнителем для любого отдельного символа, а * представляет собой любую строку из одного или нескольких символов. Немного более проблематичным является выбор всех файлов, принадлежащих к той или иной группе. Точно так же нет прямого способа получить все каталоги и все файлы, соответствующие определенным критериям. В подобных случаях необходимо запрашивать каждый результирующий набор по отдельности, а затем объединять их вместе в единый массив объектов FileSystemInfo. В следующем фрагменте кода показано, как выбрать все подкаталоги и все страницы aspx в заданной папке.
Вы можете объединить два массива вместе, используя методы класса Array.
Работа с путями
Хотя пути — это не более чем строки, существует общее мнение, что они заслуживают индивидуального набора функций, облегчающих управление путями. Тип Path предоставляет программистам беспрецедентную возможность выполнять операции с экземплярами строкового класса, которые содержат информацию о пути к файлу или каталогу. Path — это единственный экземпляр класса, который содержит только статические методы. Путь может содержать информацию об абсолютном или относительном местоположении для данного файла или папки. Если информация о местоположении является неполной и частичной, то класс дополняет ее, используя текущее местоположение, если это применимо.
Члены класса Path позволяют выполнять повседневные операции, такие как: определение того, имеет ли заданное имя файла определенное расширение, изменение расширения имени файла с сохранением всей оставшейся части пути, объединение частичных строк пути в один допустимый путь. , и больше. Класс Path не работает в сочетании с операционной системой, и его следует рассматривать просто как узкоспециализированный класс для работы со строками.
Члены класса Path никогда не взаимодействуют с файловой системой для проверки правильности имени файла. Даже если вы можете объединить две строки, чтобы получить действительное имя каталога, этого будет недостаточно для фактического создания этого нового каталога. С другой стороны, члены класса Path достаточно умны, чтобы генерировать исключение, если обнаруживают, что строка пути содержит недопустимые символы. В таблице 8 перечислены методы класса Path.
Интересно отметить, что любой вызов GetTempFileName сразу же приводит к созданию файла нулевой длины на диске и, в частности, во временной папке системы (например, C:\Windows\Temp). Это единственный случай, когда класс Path взаимодействует с операционной системой.
Ввод-вывод с файлами
Читатель читает одну порцию информации за раз. Структура считываемых данных зависит от конкретного считывателя и основного потока. Например, программа чтения текста будет читать строки текста, распознавая пару возврат каретки/перевод строки как разделитель между фрагментами. Точно так же модуль чтения двоичных файлов будет обрабатывать каждый байт в потоке по мере того, как модуль чтения XML перемещается от одного узла к другому. Читатель работает только для чтения и только для пересылки. Вы не можете вернуться к уже обработанному или пропущенному блоку данных; вы также не можете редактировать текущие данные, на которые ссылается указатель.
Класс Stream поддерживает три основные операции: чтение, запись и поиск. Операции чтения и записи влекут за собой передачу данных из потока в структуру данных и наоборот. Поиск состоит из запроса и изменения текущей позиции в потоке данных.
Содержимое файла преобразуется в поток с помощью класса FileStream. Следующий код показывает, как открыть файл, который вы хотите прочитать:
Потоки предоставляют довольно низкоуровневый интерфейс программирования, который, хотя и функционален, не всегда подходит для классов, которым необходимо выполнять более высокоуровневые операции, такие как чтение всего содержимого файла или отдельной строки.
Чтобы манипулировать содержимым файла как двоичным потоком, вы просто передаете объект FileStream специализированному объекту чтения, который знает, как с ним обращаться.
Если вы хотите обработать содержимое файла текстовым способом, вы можете использовать класс StreamReader, как показано ниже.
Для записи файлов вы часто используете класс StreamWriter и получаете доступ к его основному потоку, который также может быть зашифрованным потоком. В следующем фрагменте кода показано, как создать файл.
Создание двоичных файлов, содержащих изображения или необработанные данные, происходит по-разному. Вы просто используете BinaryWriter (или BinaryReader для чтения) в качестве объекта записи и его специальный набор методов.
Обзор
Тип перечисления FileAttributes и, в частности, его метод ToString имеют чрезвычайно удобную функцию. При вызове ToString класс возвращает строку с описанием атрибутов. Возвращаемый текст состоит из строки, разделенной запятыми, в которой каждый атрибут автоматически преобразуется в описательный текст. Например, если вы вызываете метод для работы со скрытым файлом, доступным только для чтения, вы получите результат "Только для чтения, скрытый".
Структура FILE_OBJECT используется системой для представления файлового объекта. Для защищенных подсистем пользовательского режима файловый объект представляет собой открытый экземпляр файла, устройства, каталога или тома. Для драйверов устройств и промежуточных драйверов файловый объект обычно представляет объект устройства. Для драйверов в стеке файловой системы файловый объект обычно представляет каталог или файл.
Файловый объект частично непрозрачен. Некоторые типы драйверов, такие как драйверы файловой системы и драйверы сетевого транспорта, используют некоторые поля файловых объектов.
Синтаксис
Участники
Член только для чтения, используемый системой для указания того, что объект является файловым. Если объект является файловым объектом, значение этого члена равно 5.
Член только для чтения, указывающий размер файлового объекта в байтах. Этот размер не включает расширение файлового объекта, если оно есть.
Указатель на объект устройства, на котором открыт файл.
Указатель на блок параметров тома, связанный с файловым объектом.
Обратите внимание, что если элемент Vpb не равен NULL, файл находится на смонтированном томе.
Указатель на любое необязательное состояние, которое драйвер поддерживает для файлового объекта; в противном случае NULL. Для драйверов файловой системы этот элемент должен указывать на структуру заголовка FSRTL_ADVANCED_FCB_HEADER, которая содержится в структуре, специфичной для файловой системы; в противном случае может возникнуть нестабильность системы. Обычно эта структура заголовка встроена в блок управления файлом (FCB). Однако в некоторых файловых системах, поддерживающих несколько потоков данных, таких как NTFS, эта структура заголовка представляет собой блок управления потоком (SCB).
Примечание. В стеке устройств WDM только объект функционального устройства (FDO) может использовать два указателя контекста. Драйверы файловой системы совместно используют этот член при нескольких открытиях одного и того же потока данных.
Указатель на дополнительное состояние файлового объекта, поддерживаемое драйвером; в противном случае NULL.
Примечание. Этот элемент непрозрачен для драйверов в стеке файловой системы, поскольку базовая файловая система использует этот элемент.
Указатель на объект раздела файлового объекта, доступный только для чтения. Этот элемент задается только файловыми системами и используется для взаимодействия с Cache Manager.
Непрозрачный элемент, устанавливаемый только файловыми системами, который указывает на информацию, относящуюся к дескриптору, и используется для взаимодействия с Cache Manager.
Член только для чтения, который используется в некоторых синхронных случаях для указания окончательного состояния запроса ввода-вывода файлового объекта.
Указатель на структуру FILE_OBJECT, используемую для указания того, что текущий файловый объект был открыт относительно уже открытого файлового объекта. Файловый объект, на который указывает этот член, обычно является каталогом (это означает, что текущий файл был открыт относительно этого каталога). Однако файл можно повторно открыть относительно самого себя, а альтернативные потоки данных для файла можно открыть относительно уже открытого первичного потока данных для того же файла. Элемент RelatedFileObject действителен только во время обработки запросов IRP_MJ_CREATE.
Член только для чтения. Если FALSE, операция блокировки (NtLockFile) никогда не выполнялась для файлового объекта. Если TRUE, над файловым объектом была выполнена по крайней мере одна операция блокировки. Если установлено значение TRUE, этот член всегда остается TRUE (например, снятие блокировок файлов с файлового объекта не приводит к сбросу этого члена в FALSE).
Член только для чтения. Если TRUE, операция удаления для файла, связанного с файловым объектом, существует. Если FALSE, в настоящее время нет отложенной операции удаления для файлового объекта.
Член только для чтения. Если TRUE, файл, связанный с файловым объектом, был открыт для чтения. Если FALSE, файл был открыт без доступа для чтения. Эта информация используется при проверке и/или настройке общего доступа к файлу.
Член только для чтения. Если TRUE, файл, связанный с файловым объектом, был открыт для записи. Если FALSE, файл был открыт без права записи. Эта информация используется при проверке и/или настройке общего доступа к файлу.
Член только для чтения. Если TRUE, файл, связанный с файловым объектом, был открыт для доступа на удаление. Если FALSE, файл был открыт без прав на удаление. Эта информация используется при проверке и/или настройке общего доступа к файлу.
Член только для чтения. Если TRUE, файл, связанный с файловым объектом, был открыт для общего доступа для чтения. Если FALSE, файл был открыт без доступа для чтения. Эта информация используется при проверке и/или настройке общего доступа к файлу.
Член только для чтения. Если TRUE, файл, связанный с файловым объектом, был открыт для совместного доступа для записи. Если FALSE, файл был открыт без доступа для записи. Эта информация используется при проверке и/или настройке общего доступа к файлу.
Член только для чтения. Если TRUE, файл, связанный с файловым объектом, был открыт для общего доступа на удаление. Если FALSE, файл был открыт без общего доступа для удаления. Эта информация используется при проверке и/или настройке общего доступа к файлу.
Член только для чтения, используемый системой для хранения одного или нескольких (побитовая комбинация ИЛИ) следующих значений частного флага.
Флаг | Значение |
---|---|
FO_FILE_OPEN | Устарело. | < /tr>
FO_SYNCHRONOUS_IO | Файловый объект открывается для синхронного ввода-вывода. |
FO_ALERTABLE_IO | Любое ожидание в диспетчере ввода-вывода в результате запроса к этому файловому объекту может быть предупреждено. |
FO_NO_INTERMEDIATE_BUFFERING | Файл, связанный с файловый объект не может кэшироваться или буферизоваться во внутренних буферах драйвера. |
FO_WRITE_THROUGH | Системные службы, драйверы файловой системы и драйверы, записывающие данные в файл должен передать данные в файл до того, как любая запрошенная операция записи будет считаться завершенной. |
FO_SEQUENTIAL_ONLY | Файл, связанный с файловым объектом, был открыт для последовательного Только операции ввода-вывода. |
FO_CACHE_SUPPORTED | Файл, связанный с файловым объектом, можно кэшировать. Этот флаг должен устанавливаться только драйвером файловой системы и только в том случае, если элемент FsContext указывает на допустимую структуру FSRTL_ADVANCED_FCB_HEADER. |
FO_NAMED_PIPE | Файловый объект представляет именованный канал. |
FO_STREAM_FILE | Файловый объект представляет файловый поток. |
FO_MAILSLOT | Объект файла представляет почтовый ящик. |
FO_GENERATE_AUDIT_ON_CLOSE | Устарело. |
IRP не будут поставлены в очередь для этого файлового объекта. | |
FO_DIRECT_DEVICE_OPEN | Устройство, на которое нацелен этот файловый объект, было открыт напрямую. |
FO_FILE_MODIFIED | Файл, связанный с файловым объектом, был изменен. |
FO_FILE_SIZE_CHANGED | Файл, связанный с файловым объектом, изменился в размере. |
FO_CLEANUP_COMPLETE | Файловая система завершила очистку для этого файлового объекта. |
FO_TEMPORARY_FILE < /td> | Файл, связанный с файловым объектом, является временным файлом. |
FO_DELETE_ON_CLOSE | Файл, связанный с файловым объектом, будет удален. файловой системой при закрытии. |
FO_OPENED_CASE_SENSITIVE | Учитывается регистр имени файла, связанного с файловым объектом. | tr>
FO_HANDLE_CREATED | Для файлового объекта создан дескриптор файла. |
FO_FILE_FAST_IO_READ | Быстрый I /O было выполнено чтение для этого файлового объекта. |
FO_RANDOM_ACCESS | Файл, связанный с файловым объектом, был открыт для произвольного доступа. | < /tr>
FO_FILE_OPEN_CANCEELLED | Запрос на создание этого файлового объекта был отменен до завершения. |
FO_VOLUME_OPEN | Файловый объект представляет запрос на открытие тома sa. |
FO_REMOTE_ORIGIN | Запрос на создание файла, связанного с файловым объектом, исходит от удаленной машины. | tr>
FO_SKIP_COMPLETION_PORT | Для файлового объекта, связанного с портом, определяет, должна ли система пропускать очередь к порту завершения, когда IRP завершается синхронно с возвращаемым значением состояния без ошибки . |
FO_SKIP_SET_EVENT | Пропустить настройку события для файлового объекта после завершения IRP. |
FO_SKIP_SET_FAST_IO | Пропустить установку события, передаваемого системной службе, при успешном выполнении быстрого пути ввода-вывода. |
Структура UNICODE_STRING, элемент Buffer которой указывает на доступную только для чтения строку Unicode, содержащую имя файла, открытого на томе. Если том открывается, элемент длины структуры UNICODE_STRING будет равен нулю. Обратите внимание, что имя файла в этой строке допустимо только во время начальной обработки запроса IRP_MJ_CREATE. Это имя файла должно не считаться действительным после того, как файловая система начнет обрабатывать запрос IRP_MJ_CREATE. Хранилище для строки, на которую указывает элемент Buffer структуры UNICODE_STRING, выделяется в выгружаемой системной памяти. Дополнительные сведения о получении имени файла см. в разделе FltGetFileNameInformation.
Член только для чтения, указывающий смещение файла в байтах, связанное с файловым объектом.
Член только для чтения, используемый системой для подсчета количества ожидающих ожидания файлового объекта, открытого для синхронного доступа.
Член только для чтения, используемый системой, чтобы указать, занят ли файловый объект, открытый для синхронного доступа, в настоящее время.
Непрозрачный указатель на последнюю блокировку, примененную к файловому объекту.
Непрозрачный элемент, используемый системой для блокировки события файлового объекта. Блокировка события используется для управления синхронным доступом к файловому объекту. Применимо только к файловым объектам, открытым для синхронного доступа.
Непрозрачный элемент, используемый системой для хранения объекта события для файлового объекта. Объект события используется для сигнализации о завершении запроса ввода-вывода к объекту файла, если пользовательское событие не было передано или был вызван синхронный API.
Непрозрачный указатель на информацию о порте завершения (указатель порта и ключ), связанный с файловым объектом, если таковой имеется.
Непрозрачный указатель на структуру KSPIN_LOCK, которая служит спин-блокировкой, используемой для синхронизации доступа к списку IRP файлового объекта.
Непрозрачный указатель на начало списка IRP, связанного с файловым объектом.
Непрозрачный указатель на структуру расширения файлового объекта (FOBX) файлового объекта. Структура FOBX содержит различные непрозрачные контексты, используемые внутри, а также контексты файловых объектов, доступные через подпрограммы FsRtlXxx.
Примечания
Драйверы могут использовать члены FsContext и FsContext2 для поддержания определяемого драйвером состояния открытого файлового объекта. Драйвер не может использовать эти элементы, если файловый объект не доступен в расположении стека ввода-вывода драйвера IRP.
Все остальные элементы файлового объекта либо непрозрачны, либо доступны только для чтения:
- Непрозрачные члены внутри файлового объекта следует считать недоступными. Драйверы с зависимостями от местоположений полей объектов или доступом к непрозрачным элементам могут со временем перестать быть переносимыми и несовместимыми с другими драйверами.
- Драйверы могут использовать элементы только для чтения для получения соответствующей информации, но не должны изменять элементы только для чтения и, если это указатель, объект, на который указывает элемент.
Примечание Тип объекта (например, файл, каталог или том), который представляет данный файловый объект, не может быть определен только путем изучения содержимого структуры файлового объекта. Сведения о том, как определить тип объекта, который представляет файловый объект, см. в ZwQueryInformationFile.
Общая файловая система журналов (CLFS) использует структуру LOG_FILE_OBJECT для представления журналов. Функция ClfsCreateLogFile возвращает указатель на структуру LOG_FILE_OBJECT, которую клиенты затем передают другим функциям CLFS.
Клиенты CLFS не имеют прямого доступа к членам структуры LOG_FILE_OBJECT.
Включите заголовок для доступа к классам и функциям, которые управляют и извлекают информацию о путях, файлах и каталогах.
Синтаксис
В выпуске Visual Studio 2017 заголовок еще не был стандартом C++. C++ в Visual Studio 2017 RTW реализует окончательный проект стандарта, содержащийся в ISO/IEC JTC 1/SC 22/WG 21 N4100. Visual Studio 2017 версии 15.7 и более поздних версий поддерживает новый стандарт C++17. Это совершенно новая реализация, несовместимая с предыдущей версией std::experimental. Это стало необходимо из-за поддержки символических ссылок, исправления ошибок и изменений в стандартном поведении. В Visual Studio 2019 версии 16.3 и выше в том числе предоставляется только новый std::filesystem . В том числе предусмотрена только старая экспериментальная реализация. Экспериментальная реализация будет удалена в следующем выпуске библиотек, нарушающем ABI.
Этот заголовок поддерживает файловые системы для одного из двух основных классов операционных систем хоста: Microsoft Windows и POSIX.
Хотя большая часть функций является общей для обеих операционных систем, в этом документе указаны различия. Например:
Windows поддерживает несколько корневых имен, например c: или \\network_name . Файловая система состоит из леса деревьев, каждое из которых имеет собственный корневой каталог, такой как c:\ или \\network_name\ , и каждое со своим текущим каталогом для заполнения относительного пути (тот, который не является абсолютным путем).
POSIX поддерживает одно дерево без корневого имени, один корневой каталог / и один текущий каталог.
Еще одно существенное отличие — собственное представление путей:
Windows использует завершающуюся нулем последовательность wchar_t , закодированную как UTF-16 (один или несколько элементов для каждого символа).
POSIX использует завершающуюся нулем последовательность char , закодированную как UTF-8 (один или несколько элементов для каждого символа).
Объект пути к классу хранит имя пути в собственной форме, но поддерживает простое преобразование между этой сохраненной формой и несколькими внешними формами:
Последовательность символов char , завершающаяся нулем, закодированная в соответствии с предпочтениями операционной системы.
Последовательность символов char с завершающим нулем в кодировке UTF-8.
Последовательность wchar_t с завершающим нулем, закодированная в соответствии с предпочтениями операционной системы.
Последовательность char16_t с нулевым символом в конце, закодированная как UTF-16.
Последовательность символов char32_t с завершающим нулем в кодировке UTF-32.
Взаимопреобразования между этими представлениями при необходимости опосредуются использованием одного или нескольких аспектов codecvt. Если конкретный объект языкового стандарта не указан, эти аспекты получаются из глобального языкового стандарта.
Еще одно отличие заключается в том, что каждая операционная система позволяет указать права доступа к файлам или каталогам:
Windows записывает, доступен ли файл только для чтения или для записи, атрибут, который не имеет значения для каталогов.
POSIX записывает, может ли файл быть прочитан, записан или выполнен (сканирован, если это каталог). И разрешена ли каждая операция для владельца, группы владельца или для всех, а также некоторые другие разрешения.
Общим для обеих систем является структура, накладываемая на путь после того, как вы преодолеете корневое имя. Для пути c:/abc/xyz/def.ext :
Корневое имя — c: .
Корневой каталог — / .
Корневой путь: c:/ .
Относительный путь: abc/xyz/def.ext .
Родительский путь: c:/abc/xyz .
Имя файла — def.ext .
Ствол определен .
Расширение .ext .
Небольшое отличие заключается в предпочтительном разделителе между последовательностью каталогов в пути. Обе операционные системы позволяют писать косую черту / , но в некоторых случаях Windows предпочитает обратную косую черту \ . Реализация сохраняет предпочитаемый разделитель в члене данных selected_separator пути.
Дополнительную информацию и примеры кода см. в разделе Навигация по файловой системе (C++).
Предоставляет интерфейс к файловой системе и является фабрикой объектов для доступа к файлам и другим объектам в файловой системе.
Файловая система по умолчанию, полученная путем вызова метода FileSystems.getDefault, обеспечивает доступ к файловой системе, доступной для виртуальной машины Java. Класс FileSystems определяет методы для создания файловых систем, обеспечивающих доступ к другим типам (настраиваемых) файловых систем.
Метод getPath преобразует зависящую от системы строку пути, возвращая объект Path, который можно использовать для поиска файла и доступа к нему.
Метод getPathMatcher используется для создания PathMatcher, выполняющего операции сопоставления путей.
Метод getFileStores возвращает итератор по базовым хранилищам файлов.
Метод getUserPrincipalLookupService возвращает UserPrincipalLookupService для поиска пользователей или групп по имени.
Метод newWatchService создает WatchService, который можно использовать для наблюдения за объектами на предмет изменений и событий.
Файловые системы сильно различаются. В некоторых случаях файловая система представляет собой единую иерархию файлов с одним корневым каталогом верхнего уровня. В других случаях он может иметь несколько отдельных иерархий файлов, каждая из которых имеет собственный корневой каталог верхнего уровня. Метод getRootDirectories можно использовать для перебора корневых каталогов в файловой системе. Файловая система обычно состоит из одного или нескольких основных хранилищ файлов, которые обеспечивают хранение файлов. Эти хранилища файлов также могут различаться поддерживаемыми функциями и атрибутами файлов или метаданными, которые они связывают с файлами.
Файловая система открыта при создании и может быть закрыта вызовом ее метода close. После закрытия любая дальнейшая попытка доступа к объектам в файловой системе вызовет исключение ClosedFileSystemException. Файловые системы, созданные поставщиком по умолчанию, нельзя закрыть.
Файловая система может предоставлять доступ только для чтения или для чтения и записи к файловой системе. Предоставляет ли файловая система доступ только для чтения, устанавливается при создании файловой системы и может быть проверено путем вызова ее метода isReadOnly. Попытки записи в хранилища файлов с помощью объекта, связанного с файловой системой только для чтения, вызывают исключение ReadOnlyFileSystemException .
Файловые системы безопасны для использования несколькими параллельными потоками. Метод close может быть вызван в любое время, чтобы закрыть файловую систему, но то, является ли файловая система асинхронно закрываемой, зависит от поставщика и, следовательно, не указано. Другими словами, если поток обращается к объекту в файловой системе, а другой поток вызывает метод закрытия, может потребоваться блокировка до завершения первой операции. Закрытие файловой системы приводит к закрытию всех открытых каналов, служб просмотра и других закрываемых объектов, связанных с файловой системой.
Сводка конструктора
Модификатор | < th scope="col">Конструктор и описание|
---|---|
protected | FileSystem() |
Краткое описание метода
Модификатор и тип | Метод и описание |
---|---|
abstract void | close() |
Возвращает PathMatcher, который выполняет операции сопоставления над строковым представлением объектов Path, интерпретируя заданный шаблон.
Методы, унаследованные от класса java.lang.Object
Сведения о конструкторе
Файловая система
Сведения о методе
поставщик
закрыть
После закрытия файловой системы все последующие обращения к файловой системе либо методами, определенными этим классом, либо объектами, связанными с этой файловой системой, вызывают ClosedFileSystemException . Если файловая система уже закрыта, вызов этого метода не имеет никакого эффекта.
При закрытии файловой системы будут закрыты все открытые каналы , потоки каталогов , служба наблюдения и другие объекты, которые можно закрыть, связанные с этой файловой системой. Файловая система по умолчанию не может быть закрыта.
открыт
Файловые системы, созданные поставщиком по умолчанию, всегда открыты.
Только для чтения
получить разделитель
Разделитель имен используется для разделения имен в строке пути. Реализация может поддерживать несколько разделителей имен, и в этом случае этот метод возвращает специфичный для реализации разделитель имен по умолчанию. Этот разделитель используется при создании строк пути путем вызова метода toString().
В случае поставщика по умолчанию этот метод возвращает тот же разделитель, что и File.separator .
получить корневые каталоги
Файловая система обеспечивает доступ к хранилищу файлов, которое может состоять из нескольких отдельных иерархий файлов, каждая из которых имеет собственный корневой каталог верхнего уровня. Если администратор безопасности не запретил, каждый элемент возвращаемого итератора соответствует корневому каталогу отдельной файловой иерархии. Порядок элементов не определен. Иерархии файлов могут изменяться в течение срока службы виртуальной машины Java. Например, в некоторых реализациях вставка съемных носителей может привести к созданию новой файловой иерархии с собственным каталогом верхнего уровня.
получитьFileStores
Элементы возвращенного итератора — это хранилища файлов для этой файловой системы. Порядок элементов не определен, и хранилища файлов могут меняться в течение срока службы виртуальной машины Java. Когда возникает ошибка ввода-вывода, возможно, из-за того, что хранилище файлов недоступно, итератор не возвращает ее.
Пример использования: предположим, мы хотим распечатать использование пространства для всех хранилищ файлов:
поддерживаемые FileAttributeViews
Требуется поддержка BasicFileAttributeView, поэтому набор содержит по крайней мере один элемент "базовый".
Метод supportsFileAttributeView(String) можно использовать для проверки того, поддерживает ли базовый FileStore атрибуты файла, указанные в представлении атрибутов файла.
получить путь
Преобразует строку пути или последовательность строк, которые при соединении образуют строку пути, в Path . Если в параметре more не указаны какие-либо элементы, то значением первого параметра является строка пути для преобразования. Если more указывает один или несколько элементов, то каждая непустая строка, включая first , считается последовательностью элементов имени (см. Path ) и объединяется для формирования строки пути. Подробная информация о том, как соединяются строки, зависит от поставщика, но обычно они будут соединяться с использованием разделителя имен в качестве разделителя. Например, если разделителем имен является "/" и вызывается getPath("/foo","bar","gus"), то строка пути "/foo/bar/gus" преобразуется в Path . Path, представляющий пустой путь, возвращается, если first является пустой строкой, а more не содержит непустых строк.
Синтаксический анализ и преобразование в объект пути по своей сути зависят от реализации. В простейшем случае строка пути отклоняется и создается исключение InvalidPathException, если строка пути содержит символы, которые нельзя преобразовать в символы, допустимые для хранилища файлов. Например, в системах UNIX символ NUL (\u0000) не может присутствовать в пути. Реализация может отклонять строки пути, содержащие имена, которые длиннее разрешенных любым файловым хранилищем, а если реализация поддерживает сложный синтаксис пути, она может отклонять неправильно сформированные строки пути. .
В случае поставщика по умолчанию строки путей анализируются на основе определения путей на уровне платформы или виртуальной файловой системы. Например, операционная система может не разрешать присутствие определенных символов в имени файла, но конкретное базовое файловое хранилище может налагать другие или дополнительные ограничения на набор допустимых символов.
Этот метод выдает InvalidPathException, когда строку пути не удается преобразовать в путь. Там, где это возможно и применимо, исключение создается со значением индекса, указывающим первую позицию в параметре пути, из-за которой строка пути была отклонена.
getPathMatcher
Возвращает PathMatcher, который выполняет операции сопоставления над строковым представлением объектов Path, интерпретируя заданный шаблон. Параметр синтаксисАндПаттерн идентифицирует синтаксис и шаблон и принимает форму:
Реализация FileSystem поддерживает синтаксис " glob " и " regex " и может поддерживать другие. Значение компонента синтаксиса сравнивается без учета регистра.
Если используется синтаксис " glob ", строковое представление пути сопоставляется с использованием ограниченного языка шаблонов, напоминающего регулярные выражения, но с более простым синтаксисом. Например:
*.java Соответствует пути, представляющему имя файла, оканчивающееся на .java < /tr>*.* Соответствует именам файлов, содержащим точку *. Соответствует именам файлов, оканчивающимся на .java или .class foo.? Соответствует именам файлов, начинающимся с foo. и односимвольное расширение /home/*/* Соответствует /home/gus/data на Платформы UNIX /home/** Соответствует /home/gus и /home/ gus/data на платформах UNIX C:\\* Соответствует C:\foo и C:\bar на платформе Windows (обратите внимание, что обратная косая черта экранирована; в качестве строкового литерала в языке Java шаблон будет "C:\\\\*"< /tt>)
Символ * соответствует нулю или более символам компонента имени, не пересекая границы каталога.
Символы ** соответствуют нулю или более символов, пересекающих границы каталога.
? соответствует только одному символу компонента имени.
Символ обратной косой черты ( \ ) используется для экранирования символов, которые в противном случае интерпретировались бы как специальные символы. Выражение \\ соответствует одиночной обратной косой черте и "\
Символы [ ] представляют собой выражение скобок, которое соответствует одному символу компонента имени из набора символов. Например, [abc] соответствует «a», «b» или «c». Дефис (-) может использоваться для указания диапазона, поэтому [a-z] указывает диапазон, который соответствует от «a» до «z» (включительно). Эти формы можно смешивать, так что [abce-g] соответствует «a», «b», «c», «e», «f» или «g». Если символ после [ является ! затем он используется для отрицания, поэтому [!a-c] соответствует любому символу, кроме "a", "b" или "c".
В выражении со скобками символы * , ? и символы \ соответствуют сами себе. Символ (-) соответствует самому себе, если он является первым символом в квадратных скобках или первым символом после ! если отрицание.
Символы < > представляют собой группу подшаблонов, где группа соответствует, если совпадает любой подшаблон в группе. Символ "," используется для разделения подшаблонов. Группы не могут быть вложенными.
Точка в начале/символы точки в имени файла обрабатываются как обычные символы в операциях сопоставления. Например, шаблон "*" соответствует имени файла ".login" . Метод Files.isHidden(java.nio.file.Path) можно использовать для проверки того, считается ли файл скрытым.
Все остальные символы соответствуют самим себе в зависимости от реализации. Сюда входят символы, представляющие любые разделители имен .
Соответствие корневых компонентов сильно зависит от реализации и не указывается.
Если используется синтаксис " regex ", компонент шаблона является регулярным выражением, определенным классом Pattern.
Для синтаксиса glob и regex сведения о сопоставлении, такие как учет регистра, зависят от реализации и поэтому не указываются.
getUserPrincipalLookupService
Возвращает UserPrincipalLookupService для этой файловой системы (дополнительная операция). Получившуюся службу поиска можно использовать для поиска имен пользователей или групп.
Пример использования. Предположим, мы хотим сделать "joe" владельцем файла:
новая служба наблюдения
Этот метод создает новую службу наблюдения, которую можно использовать для наблюдения за зарегистрированными объектами на предмет изменений и событий.
- Обзор:
- Вложенный |
- Поле | |
- Подробности:
- Поле | |
Сообщите об ошибке или функции.
Дополнительные справочные материалы по API и документацию для разработчиков см. в документации по Java SE. Эта документация содержит более подробные описания, предназначенные для разработчиков, с концептуальными обзорами, определениями терминов, обходными путями и примерами рабочего кода.
Авторские права © 1993, 2022, Oracle и/или ее дочерние компании. Все права защищены. Использование регулируется условиями лицензии. Также ознакомьтесь с политикой распространения документации.
Несмотря на то, что файловая система хранится на том же флэш-чипе, что и программа, программирование нового скетча не изменит содержимое файловой системы. Это позволяет использовать файловую систему для хранения данных эскизов, файлов конфигурации или контента для веб-сервера.
На следующей диаграмме показана схема флэш-памяти, используемая в среде Arduino:
Размер файловой системы зависит от размера флэш-чипа. В зависимости от платы, выбранной в среде IDE, в следующей таблице показаны параметры размера флэш-памяти.
Доступна еще одна опция, называемая «Отображение, определяемое оборудованием и эскизом». Это позволяет эскизу, а не пользователю, выбирать конфигурацию файловой системы при загрузке в соответствии с размером микросхемы флэш-памяти.
Эта опция также включена с этим определением компиляции: -DFLASH_MAP_SUPPORT=1 .
Есть три возможных конфигурации:
FLASH_MAP_OTA_FS : самое большое доступное пространство для встроенной файловой системы, позволяющее использовать OTA (обозначено как «OTA» в таблице)
FLASH_MAP_MAX_FS: самое большое доступное пространство для встроенной файловой системы (обозначено как «MAX» в таблице)
FLASH_MAP_NO_FS : нет встроенной FS
Sketch может вызвать определенную конфигурацию, добавив эту строку:
Размер микросхемы флэш-памяти (в байтах)
Размер файловой системы (байты)
32 КБ (OTA), 64 КБ, 128 КБ (МАКС.)
64 КБ (OTA), 128 КБ, 144 КБ, 160 КБ, 192 КБ, 256 КБ, 512 КБ (МАКС.)
64 КБ, 128 КБ, 256 КБ (OTA), 512 КБ, 1 МБ (МАКС.)
1 МБ, 2 МБ (OTA), 3 МБ (МАКС.)
Примечание: чтобы использовать любые функции файловой системы в скетче, добавьте в скетч следующее включение:
Предупреждение об устаревании SPIFFS¶
SPIFFS в настоящее время устарела и может быть удалена в будущих версиях ядра. Пожалуйста, рассмотрите возможность переноса вашего кода в LittleFS. SPIFFS больше не поддерживается активно разработчиком основной ветки разработки, в то время как LittleFS находится в активной разработке, поддерживает настоящие каталоги и во много раз быстрее для большинства операций.
SPIFFS и LittleFS¶
Есть две файловые системы для использования встроенной флэш-памяти ESP8266: SPIFFS и LittleFS.
SPIFFS — это исходная файловая система, которая идеально подходит для приложений с ограниченным пространством и оперативной памятью, которые используют множество небольших файлов и заботятся о статическом и динамическом выравнивании износа и не нуждаются в реальной поддержке каталогов. Накладные расходы файловой системы на флэш-памяти также минимальны.
LittleFS добавлена недавно и ориентирована на более высокую производительность и поддержку каталогов, но имеет более высокую файловую систему и накладные расходы на файл (минимум 4 КБ по сравнению с минимальной единицей размещения файла SPIFFS 256 байт).
У них общий совместимый API, но несовместимые реализации на флэш-памяти, поэтому важно выбрать одну или несколько для каждого проекта, поскольку попытка монтирования тома SPIFFS в LittleFS может привести к операции форматирования и определенно не сохранит файлы. и наоборот.
Фактические объекты File и Dir, возвращенные из любой файловой системы, ведут себя одинаково, и документация применима к обоим. Чтобы преобразовать большинство приложений из SPIFFS в LittleFS, достаточно просто изменить SPIFFS.begin() на LittleFS.begin() и SPIFFS.open() на LittleFS.open(), при этом остальная часть кода останется нетронутой.
SDFS и SD¶
Файловые системы FAT поддерживаются на ESP8266 с использованием старой оболочки Arduino «SD.h», которая прозрачно оборачивает файловую систему «SDFS.h».
Все описанные ниже команды, относящиеся к SPIFFS или LittleFS, применимы к SD/SDFS.
Для устаревших приложений можно по-прежнему использовать классическую файловую систему SD, но для новых приложений рекомендуется прямой доступ к файловой системе SDFS, поскольку это может предоставить дополнительные функции, которых не было в старой файловой системе Arduino SD.
Обратите внимание, что в более ранних версиях ядра использование SD и SPIFFS в одном скетче было сложным и требовало использования NO_FS_GLOBALS . Текущий дизайн делает SD, SDFS, SPIFFS и LittleFS полностью совместимыми с исходным кодом, поэтому удалите все определения NO_FS_GLOBALS в своих проектах при обновлении основных версий.
Ограничения файловой системы SPIFFS¶
Реализация SPIFFS для ESP8266 должна была учитывать ограничения чипа, в том числе ограниченный объем оперативной памяти. SPIFFS был выбран потому, что он предназначен для небольших систем, но за это приходится платить некоторыми упрощениями и ограничениями.
Во-первых, за кулисами SPIFFS не поддерживает каталоги, он просто хранит «плоский» список файлов. Но, в отличие от традиционных файловых систем, в именах файлов разрешен символ косой черты '/', поэтому функции, которые имеют дело со списком каталогов (например, openDir("/website")), в основном просто фильтруют имена файлов и сохраняют те, которые начинаются с запрошенного префикса. ( /Веб-сайт/ ). На практике это мало что меняет.
Во-вторых, существует ограничение в 32 символа для имен файлов. Один символ '\0' зарезервирован для завершения строки C, поэтому у нас остается 31 пригодный для использования символ.
В совокупности это означает, что рекомендуется использовать короткие имена файлов и не использовать глубоко вложенные каталоги, поскольку полный путь к каждому файлу (включая каталоги, символы '/', базовое имя, точку и расширение) должен состоять из 31 символа. максимум. Например, имя файла /website/images/bird_thumbnail.jpg состоит из 34 символов и вызовет некоторые проблемы при его использовании, например, в exists() или в случае, если другой файл начинается с тех же первых 31 символа.
Предупреждение. Этот предел легко достигается, и если его игнорировать, проблемы могут остаться незамеченными, поскольку ни при компиляции, ни во время выполнения не появится сообщение об ошибке.
Дополнительные сведения о внутреннем устройстве реализации SPIFFS см. в файле сведений SPIFFS.
Ограничения файловой системы LittleFS¶
Реализация LittleFS для ESP8266 поддерживает имена файлов длиной до 31 символа + завершающий ноль (например, char filename[32] ) и столько подкаталогов, сколько позволяет пространство.
Предполагается, что имена файлов находятся в корневом каталоге, если нет начального символа «/».
Для открытия файлов в подкаталогах необходимо указать полный путь к файлу (например, open("/sub/dir/file.txt"); ). Подкаталоги создаются автоматически, когда вы пытаетесь создать файл в подкаталоге, и когда последний файл в подкаталоге удаляется, сам подкаталог автоматически удаляется. Это связано с тем, что в существующей файловой системе SPIFFS не было метода mkdir().
В отличие от SPIFFS, фактические файловые дескрипторы выделяются в соответствии с запросом приложения, поэтому в условиях нехватки памяти вы не сможете открывать новые файлы. И наоборот, это также означает, что только используемые файловые дескрипторы фактически будут занимать место в куче.
Поскольку существуют каталоги, метод openDir ведет себя иначе, чем SPIFFS. В то время как SPIFFS будет возвращать файлы в «подкаталогах» при переходе через Dir::next() (поскольку они на самом деле не являются подкаталогами, а просто файлами с «/» в их именах), LittleFS будет возвращать только файлы в определенном подкаталоге. Это имитирует поведение POSIX для обхода каталогов, к которому привыкло большинство программистов на C.
Загрузка файлов в файловую систему¶
ESP8266FS — это инструмент, который интегрируется в среду разработки Arduino IDE. Он добавляет пункт меню в меню Инструменты для загрузки содержимого каталога данных скетча в файловую систему флэш-памяти ESP8266.
Предупреждение. В связи с переходом от устаревшего файла esptool-ck.exe к поддерживаемому инструменту загрузки esptool.py, лицам, выполняющим обновление до версии 2.5.1, потребуется обновить указанный ниже инструмент ESP8266FS до версии 0.5.0 или более поздней. Предыдущие версии завершатся ошибкой «esptool не найден», потому что они не знают, как использовать esptool.py.
В каталоге вашего альбома для рисования Arduino создайте каталог инструментов, если он еще не существует.
Распакуйте инструмент в каталог инструментов (путь будет выглядеть так: /Arduino/tools/ESP8266FS/tool/esp8266fs.jar). При обновлении перезапишите существующий файл JAR более новой версией.
Перезапустите Arduino IDE.
Откройте эскиз (или создайте новый и сохраните его).
Перейдите в каталог эскиза (выберите Sketch > Показать папку эскиза).
Создайте каталог с именем data и любые файлы, которые вы хотите в файловой системе.
Убедитесь, что вы выбрали плату, порт и закрыли Serial Monitor.
Если ваша плата требует от вас нажатия кнопки (или другого действия) для входа в режим начальной загрузки для прошивки скетча, сделайте это сейчас.
Выберите «Инструменты» > «Выгрузка данных эскиза ESP8266». Это должно начать загрузку файлов в файловую систему флэш-памяти ESP8266. После этого в строке состояния IDE отобразится сообщение SPIFFS Image Uploaded.
ESP8266LittleFS – эквивалентный инструмент для LittleFS.
Установить как указано выше
Чтобы загрузить файловую систему LittleFS, используйте Инструменты > ESP8266 Загрузка данных LittleFS
Объект файловой системы (SPIFFS/LittleFS/SD/SDFS)¶
setConfig¶
Этот метод позволяет настроить параметры файловой системы перед монтированием. Все файловые системы имеют свои собственные *Config (т. е. SDFSConfig или SPIFFSConfig с собственным набором параметров. Все файловые системы позволяют явно включать/отключать форматирование при сбое монтирования. Если вы не вызовете этот метод setConfig перед выполнением begin() , вы получите поведение и конфигурация по умолчанию. По умолчанию SPIFFS автоматически форматирует файловую систему, если не может ее смонтировать, а SDFS — нет.
начать¶
Этот метод монтирует файловую систему. Его необходимо вызывать перед использованием любых других API-интерфейсов FS. Возвращает true, если файловая система была смонтирована успешно, иначе false. Без параметров он отформатирует SPIFFS, если не сможет смонтировать его с первой попытки.
Обратите внимание, что оба метода автоматически форматируют файловую систему, если она не обнаружена. Это означает, что если вы попытаетесь выполнить SPIFFS.begin() в файловой системе LittleFS, вы потеряете все данные в этой файловой системе, и наоборот.
Этот метод размонтирует файловую систему. Используйте этот метод перед обновлением файловой системы с помощью OTA.
формат¶
Форматирует файловую систему. Может вызываться до или после вызова begin . Возвращает true, если форматирование прошло успешно.
Открывает файл. path должен быть абсолютным путем, начинающимся с косой черты (например, /dir/filename.txt). mode — строка, указывающая режим доступа. Это может быть один из «r», «w», «a», «r+», «w+», «a+». Значение этих режимов такое же, как и для функции fopen C.
Возвращает объект Файл. Чтобы проверить, успешно ли был открыт файл, используйте логический оператор.
существует¶
Возвращает true, если файл с указанным путем существует, и false в противном случае.
mkdir¶
Возвращает true, если каталог создан успешно, и false в противном случае.
rmdir¶
Возвращает true, если каталог был успешно удален, и false в противном случае.
openDir¶
Открывает каталог с заданным абсолютным путем. Возвращает объект Dir. Обратите внимание на предыдущее обсуждение различий в поведении LittleFS и SPIFFS для этого вызова.
удалить¶
Удаляет файл по его абсолютному пути. Возвращает true, если файл был успешно удален.
переименовать¶
Переименовывает файл из pathFrom в pathTo . Пути должны быть абсолютными. Возвращает true, если файл был успешно переименован.
Реализовано только в SPIFFS. Выполняет быструю операцию сборки мусора в SPIFFS, что может ускорить/улучшить запись в будущем. В очень заполненных или очень фрагментированных файловых системах использование этого вызова может избежать или уменьшить проблемы, когда SPIFFS сообщает о свободном пространстве, но не может записать дополнительные данные в файл. Дополнительную информацию см. в этом обсуждении.
проверить¶
Реализовано только в SPIFFS. Выполняет углубленную проверку метаданных файловой системы и исправляет то, что можно исправить. Обычно не требуется и не гарантирует фактического исправления чего-либо в случае повреждения.
Заполняет структуру FSInfo информацией о файловой системе. Возвращает true в случае успеха, false в противном случае.
Информационная структура файловой системы¶
Это структура, которую можно заполнить с помощью метода FS::info. - totalBytes — общий размер полезных данных в файловой системе - usedBytes — количество байтов, используемых файлами - blockSize — размер блока файловой системы - pageSize — размер логической страницы файловой системы - maxOpenFiles — максимальное количество файлов, которые могут быть открыты одновременно - maxPathLength — max длина имени файла (включая один байт для завершения нуля)
info64¶
Выполняет ту же операцию, что и информация, но позволяет сообщать о размере файловой системы/использовании/и т. д. более 4 ГБ. Следует использовать с файловыми системами SD и SDFS, поскольку размер большинства современных SD-карт превышает 4 ГБ.
setTimeCallback(time_t (*cb)(void))¶
Файловые системы SD, SDFS и LittleFS поддерживают отметку времени файла, которая обновляется при открытии файла для записи. По умолчанию ESP8266 будет использовать внутреннее время, возвращенное из time(NULL) (т.е.местное время, а не UTC, чтобы соответствовать существующей файловой системе FAT), но это можно изменить на GMT или любой другой стандарт, который вы хотите, используя setTimeCallback() . Если ваше приложение устанавливает системное время с помощью NTP перед файловыми операциями, вам не нужно использовать эту функцию. Однако, если вам нужно установить конкретное время для файла или системные часы неверны, и вам нужно прочитать время из внешнего RTC или использовать фиксированное время, этот вызов позволяет вам это сделать.
При обычном использовании с функционирующим вызовом time() пользовательские приложения не должны использовать эту функцию.
Объект каталога (Dir)¶
Целью объекта Dir является перебор файлов внутри каталога. Он предоставляет несколько методов доступа.
В следующем примере показано, как его следует использовать:
Возвращает значение true, если в каталоге есть файлы для повторения. Его необходимо вызывать перед вызовом функций fileName() , fileSize() и openFile().
имя_файла¶
Возвращает имя текущего файла, на который указывает внутренний итератор.
Размер файла¶
Возвращает размер текущего файла, на который указывает внутренний итератор.
fileTime¶
Возвращает время записи time_t текущего файла, на который указывает внутренний итератор.
время создания файла¶
Возвращает время создания time_t текущего файла, на который указывает внутренний итератор.
isFile¶
Возвращает true, если текущий файл, на который указывает внутренний итератор, является файлом.
isDirectory¶
Возвращает true, если текущий файл, на который указывает внутренний итератор, является каталогом.
открыть файл¶
Этот метод принимает аргумент mode, который имеет то же значение, что и функция SPIFFS/LittleFS.open().
перемотать¶
Сбрасывает внутренний указатель на начало каталога.
setTimeCallback(time_t (*cb)(void))¶
Устанавливает обратный вызов времени для любых файлов, доступ к которым осуществляется из этого объекта Dir через openNextFile. Обратите внимание, что файловые системы SD и SDFS поддерживают только обратный вызов для всей файловой системы, и вызовы Dir::setTimeCallback могут привести к неожиданному поведению.
Файловый объект¶
Функции SPIFFS/LittleFS.open() и dir.openFile() возвращают объект File. Этот объект поддерживает все функции Stream, поэтому вы можете использовать readBytes , findUntil , parseInt , println и все другие методы Stream.
Есть также некоторые функции, специфичные для объекта File.
Эта функция ведет себя как функция fseek C. В зависимости от значения mode перемещает текущую позицию в файле следующим образом:
если режим SeekSet , position устанавливается на смещение в байтах от начала.
если режим SeekCur , текущая позиция перемещается на байты смещения.
если режим SeekEnd , position задается смещением в байтах от конца файла.
Читайте также: