161
правкаИзменения
Создал статью из материала lavmen и дополнил
<tt>UINT16 '''DL_FsSSearch'''(FS_SEARCH_PARAMS_T params, WCHAR *search_string, FS_SEARCH_HANDLE_T *handle, UINT16 *res_count, DL_FS_OWNER_T owner_id);</tt>
== Описание ==
Функция [[Device Layer|DL]] для синхронного поиска файлов
== Параметры ==
#'''FS_SEARCH_PARAMS_T params
#:[[#FS_SEARCH_PARAMS_T|Параметры для поиска]]
#'''WCHAR *search_string
#:[[#Строка для поиска|Строка для поиска]]
#'''FS_SEARCH_HANDLE_T *handle
#:Указатель на переменную, в которую возвращается идентификатор поиска
#'''UINT16 *res_count
#:Указатель на переменную, куда сохранится количество результатов поиска
#'''DL_FS_OWNER_T owner_id
#:Идентификатор приложения
----
=== FS_SEARCH_PARAMS_T ===
<pre>
typedef struct
{
#if defined(FTR_L7E) || defined(FTR_L9)
UINT32 flags;
#else
UINT8 flags;
#endif
UINT16 attrib; // В результат попадают те файлы, у которых (аттрибуты & mask == attrib)
UINT16 mask;
} FS_SEARCH_PARAMS_T;
</pre>
==== Значения флагов ====
Для формирования поля '''flags''' структуры [[#FS_SEARCH_PARAMS_T|FS_SEARCH_PARAMS_T]], можно комбинировать следующие флаги с помощью операции "логическое или", например
<pre>
FS_SEARCH_PATH_START | FS_SEARCH_RECURSIVE
</pre>
{| border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse"
|-
| style="width:200px" |'''FS_SEARCH_EXCLUDE''' || ?
|-
|'''FS_SEARCH_COMBINED''' || ?
|-
|'''FS_SEARCH_SORT_CHRONOLOGICAL''' || Cортировка по времени (создания/редактирования?)
|-
|'''FS_SEARCH_DIR_LISTING, FS_SEARCH_FOLDERS''' || Возможно выдаст список папок
|-
|'''FS_SEARCH_PATH_START, FS_SEARCH_START_PATH''' || Имена файлов в результате будут содержать полный путь
|-
|'''FS_SEARCH_SORT_ALPHANUMERIC, FS_SEARCH_SORT_BY_NAME''' || Сортировка по алфавиту
|-
|'''FS_SEARCH_OWNER_MATCH''' || Проверять владельца
|-
|'''FS_SEARCH_RECURSIVE''' || Рекурсивный поиск (будет искать в подпапках)
|-
|'''FS_SEARCH_RECURSIVE_AND_SORT_BY_NAME''' || FS_SEARCH_PATH_START, FS_SEARCH_SORT_ALPHANUMERIC и FS_SEARCH_RECURSIVE вместе
|-
|'''FS_SEARCH_RECURSIVE_AND_SORT_BY_TIME''' || FS_SEARCH_PATH_START, FS_SEARCH_SORT_CHRONOLOGICAL и FS_SEARCH_RECURSIVE вместе
|}
==== Значения атрибутов ====
Для формирования поля '''attrib''' структуры [[#FS_SEARCH_PARAMS_T|FS_SEARCH_PARAMS_T]], можно комбинировать следующие флаги с помощью операции "логическое или":
{| border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse"
|-
| style="width:200px" |'''FS_ATTR_DEFAULT''' || По умолчанию
|-
|'''FS_ATTR_READONLY''' || Файл с аттрибутом только чтение
|-
|'''FS_ATTR_HIDDEN''' || Файл с аттрибутом скрытый
|-
|'''FS_ATTR_SYSTEM''' || Файл с аттрибутом системный
|-
|'''FS_ATTR_VOLUME''' || Аттрибут диска
|-
|'''FS_ATTR_DIRECTORY''' || Аттрибут папки
|-
|'''FS_ATTR_ARCHIVE''' || Файл с аттрибутом архивный
|}
<br>----
=== Строка для поиска ===
Для формирования поисковой строки, сначала пишем папку(ки), где будем искать:
<pre>
L"file://b/mobile/audio/"
</pre>
В поисковой строке также присутствуют спецсимволы-разделители. Вставляются их значения прямо в текст строки с помощью символа "\". Например, если мы хотим добавить в строку поиска паттерну для поиска, то мы добавляем для разделитель FS_MATCH_SEPARATOR (0xFFFE), и сразу после него пишем паттерны (*.mp3 для музыки):
<pre>
L"file://b/mobile/audio/\0xFFFE*.mp3"
</pre>
{| border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse"
! Название !! Значение !! Описание
|-
| style="width:200px" |'''FS_MATCH_SEPARATOR''' || style="width:90px" | 0xFFFE || Разделитель между паттернами для поиска
|-
|'''FS_MATCH_PATH_SEPARATOR''' || 0xFFFD || Разделитель между путями для поиска
|-
|'''FS_MATCH_PATH_NONREC_SEPARATOR''' || 0xFFFC || ?
|-
|'''FS_MATCH_PATH_EXCLUDE_SEPARATOR''' || 0xFFFB || Разделитель между путями, которые нужно исключить из поиска
|-
|'''FS_MATCH_PATH_NONREC_EXCLUDE_SEPARATOR''' || 0xFFFA || ?
|}
== Пример ==
<pre>
// Ищем все mp3 файлы на флешке в папке аудио
DL_FsSSearch(search, L"file://b/mobile/audio/\0xFFFE*.mp3", &handle, &count, DL_FS_OWNER_RESERVED);
</pre>
[[Категория:Функции Файловой Системы]]
== Описание ==
Функция [[Device Layer|DL]] для синхронного поиска файлов
== Параметры ==
#'''FS_SEARCH_PARAMS_T params
#:[[#FS_SEARCH_PARAMS_T|Параметры для поиска]]
#'''WCHAR *search_string
#:[[#Строка для поиска|Строка для поиска]]
#'''FS_SEARCH_HANDLE_T *handle
#:Указатель на переменную, в которую возвращается идентификатор поиска
#'''UINT16 *res_count
#:Указатель на переменную, куда сохранится количество результатов поиска
#'''DL_FS_OWNER_T owner_id
#:Идентификатор приложения
----
=== FS_SEARCH_PARAMS_T ===
<pre>
typedef struct
{
#if defined(FTR_L7E) || defined(FTR_L9)
UINT32 flags;
#else
UINT8 flags;
#endif
UINT16 attrib; // В результат попадают те файлы, у которых (аттрибуты & mask == attrib)
UINT16 mask;
} FS_SEARCH_PARAMS_T;
</pre>
==== Значения флагов ====
Для формирования поля '''flags''' структуры [[#FS_SEARCH_PARAMS_T|FS_SEARCH_PARAMS_T]], можно комбинировать следующие флаги с помощью операции "логическое или", например
<pre>
FS_SEARCH_PATH_START | FS_SEARCH_RECURSIVE
</pre>
{| border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse"
|-
| style="width:200px" |'''FS_SEARCH_EXCLUDE''' || ?
|-
|'''FS_SEARCH_COMBINED''' || ?
|-
|'''FS_SEARCH_SORT_CHRONOLOGICAL''' || Cортировка по времени (создания/редактирования?)
|-
|'''FS_SEARCH_DIR_LISTING, FS_SEARCH_FOLDERS''' || Возможно выдаст список папок
|-
|'''FS_SEARCH_PATH_START, FS_SEARCH_START_PATH''' || Имена файлов в результате будут содержать полный путь
|-
|'''FS_SEARCH_SORT_ALPHANUMERIC, FS_SEARCH_SORT_BY_NAME''' || Сортировка по алфавиту
|-
|'''FS_SEARCH_OWNER_MATCH''' || Проверять владельца
|-
|'''FS_SEARCH_RECURSIVE''' || Рекурсивный поиск (будет искать в подпапках)
|-
|'''FS_SEARCH_RECURSIVE_AND_SORT_BY_NAME''' || FS_SEARCH_PATH_START, FS_SEARCH_SORT_ALPHANUMERIC и FS_SEARCH_RECURSIVE вместе
|-
|'''FS_SEARCH_RECURSIVE_AND_SORT_BY_TIME''' || FS_SEARCH_PATH_START, FS_SEARCH_SORT_CHRONOLOGICAL и FS_SEARCH_RECURSIVE вместе
|}
==== Значения атрибутов ====
Для формирования поля '''attrib''' структуры [[#FS_SEARCH_PARAMS_T|FS_SEARCH_PARAMS_T]], можно комбинировать следующие флаги с помощью операции "логическое или":
{| border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse"
|-
| style="width:200px" |'''FS_ATTR_DEFAULT''' || По умолчанию
|-
|'''FS_ATTR_READONLY''' || Файл с аттрибутом только чтение
|-
|'''FS_ATTR_HIDDEN''' || Файл с аттрибутом скрытый
|-
|'''FS_ATTR_SYSTEM''' || Файл с аттрибутом системный
|-
|'''FS_ATTR_VOLUME''' || Аттрибут диска
|-
|'''FS_ATTR_DIRECTORY''' || Аттрибут папки
|-
|'''FS_ATTR_ARCHIVE''' || Файл с аттрибутом архивный
|}
<br>----
=== Строка для поиска ===
Для формирования поисковой строки, сначала пишем папку(ки), где будем искать:
<pre>
L"file://b/mobile/audio/"
</pre>
В поисковой строке также присутствуют спецсимволы-разделители. Вставляются их значения прямо в текст строки с помощью символа "\". Например, если мы хотим добавить в строку поиска паттерну для поиска, то мы добавляем для разделитель FS_MATCH_SEPARATOR (0xFFFE), и сразу после него пишем паттерны (*.mp3 для музыки):
<pre>
L"file://b/mobile/audio/\0xFFFE*.mp3"
</pre>
{| border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse"
! Название !! Значение !! Описание
|-
| style="width:200px" |'''FS_MATCH_SEPARATOR''' || style="width:90px" | 0xFFFE || Разделитель между паттернами для поиска
|-
|'''FS_MATCH_PATH_SEPARATOR''' || 0xFFFD || Разделитель между путями для поиска
|-
|'''FS_MATCH_PATH_NONREC_SEPARATOR''' || 0xFFFC || ?
|-
|'''FS_MATCH_PATH_EXCLUDE_SEPARATOR''' || 0xFFFB || Разделитель между путями, которые нужно исключить из поиска
|-
|'''FS_MATCH_PATH_NONREC_EXCLUDE_SEPARATOR''' || 0xFFFA || ?
|}
== Пример ==
<pre>
// Ищем все mp3 файлы на флешке в папке аудио
DL_FsSSearch(search, L"file://b/mobile/audio/\0xFFFE*.mp3", &handle, &count, DL_FS_OWNER_RESERVED);
</pre>
[[Категория:Функции Файловой Системы]]