1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/openharmony-distributeddatamgr_file

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Распределенные файлы

Введение

В настоящее время подсистема распределённых файлов предоставляет приложениям JavaScript API для ввода-вывода, включая API для управления файлами и каталогами, получения информации о файлах, чтения и записи потоков данных файлов, а также получение URI вместо абсолютных путей.

Архитектура

В настоящее время подсистема распределённых файлов предоставляет только локальные JavaScript API файлов для приложений через модули FileIO и File. Подсистема распределённых файлов использует LibN для абстрагирования API на уровне NAPI, предоставляя базовые возможности, такие как система типов, управление памятью и общие модели программирования для подсистемы. Эта подсистема зависит от слоя движка фреймворка разработки приложений на JavaScript для преобразования JavaScript API в C++ код, зависит от фреймворка приложений для предоставления каталогов, связанных с приложением, и зависит от GLIBC для предоставления возможностей ввода-вывода.Рисунок 1 Архитектура подсистемы распределённых файлов Архитектура подсистемы распределённых файлов

Структура директорий

foundation/distributeddatamgr/distributedfile
├── figures                     # Изображения
├── interfaces                  # API
│    └── kits                   # Внешне экспонируемые API
├── utils                       # Общие компоненты
│    └── filemgmt_libhilog      # Компоненты журнала
│    └── filemgmt_libn          # Компоненты платформы

Ограничения

Ограничения для локальных API ввода-вывода:

  • Кодировка должна быть только UTF-8/16.
  • URI не должны содержать внешние каталоги хранения.

Использование

Доступные API

Сейчас распределённая система файлов предоставляет API для доступа к локальным файлам и директориям. Ниже приведена таблица, описывающая типы API, классифицированные по функциям.

Таблица 1 Типы API

Тип API

Функционал

Связанный модуль

Пример API (Имя класса.Имя метода)

Основной API работы с файлами

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

@OHOS.distributedfile.fileio

accessSync

chownSync

chmodSync

Дистрибутивный API работы с файлами

API для базовой статистики

Собирает базовую статистику, включая размер файла, права доступа и время последней модификации на основе указанных абсолютных путей.

@OHOS.distributedfile.fileio

Stat.statSync

Основной API работы с директориями

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

@OHOS.distributedfile.dirio

mkdirSync

rmdirSync

existsDirSync

API для поточного чтения/записи файлов

Чтение и запись данных файлов на основе указанных абсолютных путей или дескрипторов файлов.

@OHOS. distributedfile. fileio

Stream. createStreamSync

Продолжение перевода:

<tr id="row292317176211">
<td class="cellrowborder" valign="top" width="15.02%" headers="mcps1.2.5.1.1 ">
<p id="p292317176211"><a name="p292317176211"></a><a name="p292317176211"></a>API для чтения директорий</p>
</td>
<td class="cellrowborder" valign="top" width="32.25%" headers="mcps1.2.5.1.2 ">
<p id="p292317176211"><a name="p292317176211"></a><a name="p292317176211"></a>Чтение директорий и определение типов файлов на основе указанных абсолютных путей.</p>
</td>
<td class="cellrowborder" valign="top" width="25.84%" headers="mcps1.2.5.1.3 ">
<p id="p292317176211"><a name="p292317176211"></a><a name="p292317176211"></a>@OHOS.distributedfile.fileio</p>
</td>
<td class="cellrowborder" valign="top" width="26.89%" headers="mcps1.2.5.1.4 ">
<p id="p292317176211"><a name="p292317176211"></a><a name="p292317176211"></a>Dir.openDirSync</p>
</td>
</tr>

<table>
 <tbody>
  <tr id="row82479241516">
   <td class="cellrowborder" valign="top" width="15.02%" headers="mcps1.2.5.1.1">
    <p id="p12923111711216"><a name="p12923111711216"></a><a name="p12923111711216"></a>API работы с файлами в песочнице</p>
   </td>
   <td class="cellrowborder" valign="top" width="32.25%" headers="mcps1.2.5.1.2">
    <p id="p49237171020"><a name="p49237171020"></a><a name="p49237171020"></a>Предоставляет подмножество или комбинацию возможностей, предоставляемых базовым API файлов, директорий и статистики на основе указанных URI.</p>
   </td>
   <td class="cellrowborder" valign="top" width="25.84%" headers="mcps1.2.5.1.3">
    <p id="p724852418510"><a name="p724852418510"></a><a name="p724852418510"></a>@system.file</p>
   </td>
   <td class="cellrowborder" valign="top" width="26.89%" headers="mcps1.2.5.1.4">
    <p id="p0390135216324"><a name="p0390135216324"></a><a name="p0390135216324"></a>Перемещение</p>
    <p id="p202016525456"><a name="p202016525456"></a><a name="p202016525456"></a>Копирование</p>
    <p id="p8142558194520"><a name="p8142558194520"></a><a name="p8142558194520"></a>Список</p>
   </td>
  </tr>
 </tbody>
</table>

URI-ы, используемые в API файлов песочницы, разделены на три типа, как показано в следующей таблице.
```**Таблица 2** Типы URI<a name="table947391523311"></a>
<table>
<thead align="left">
<tr id="row84733151332">
<th class="cellrowborder" valign="top" width="13.969999999999999%" id="mcps1.2.5.1.1">
<p id="p32271219113313"><a name="p32271219113313"></a><a name="p32271219113313"></a>Тип директории</p>
</th>
<th class="cellrowborder" valign="top" width="16.41%" id="mcps1.2.5.1.2">
<p id="p3227191993310"><a name="p3227191993310"></a><a name="p3227191993310"></a>Префикс</p>
</th>
<th class="cellrowborder" valign="top" width="22%" id="mcps1.2.5.1.3">
<p id="p192277196333"><a name="p192277196333"></a><a name="p192277196333"></a>Доступность</p>
</th>
<th class="cellrowborder" valign="top" width="47.620000000000005%" id="mcps1.2.5.1.4">
<p id="p18227719103313"><a name="p18227719103313"></a><a name="p18227719103313"></a>Описание</p>
</th>
</tr>
</thead>
<tbody>
<tr id="row1474161514330">
<td class="cellrowborder" valign="top" width="13.969999999999999%" headers="mcps1.2.5.1.1">
<p id="p9896152614335"><a name="p9896152614335"></a><a name="p9896152614335"></a>Темпorary директория</p>
</td>
<td class="cellrowborder" valign="top" width="16.41%" headers="mcps1.2.5.1.2">
<p id="p389632610335"><a name="p389632610335"></a><a name="p389632610335"></a>internal://cache/</p>
</td>
<td class="cellrowborder" valign="top" width="22%" headers="mcps1.2.5.1.3">
<p id="p989610267332"><a name="p989610267332"></a><a name="p989610267332"></a>Только текущее приложение</p>
</td>
<td class="cellrowborder" valign="top" width="47.620000000000005%" headers="mcps1.2.5.1.4">
<p id="p16896726173311"><a name="p16896726173311"></a><a name="p16896726173311"></a>Чтение и запись доступны, а также могут быть очищены в любое время. Эта директория обычно используется для временного скачивания или кэширования.</p>
</td>
</tr>
<tr id="row194741315193312">
<td class="cellrowborder" valign="top" width="13.969999999999999%" headers="mcps1.2.5.1.1">
<p id="p12896142620339"><a name="p12896142620339"></a><a name="p12896142620339"></a>Личная директория приложения</p>
</td>
<td class="cellrowborder" valign="top" width="16.41%" headers="mcps1.2.5.1.2">
<p id="p128961426203310"><a name="p128961426203310"></a><a name="p128961426203310"></a>internal://appdata/</p>
</td>
<td class="cellrowborder" valign="top" width="22%" headers="mcps1.2.5.1.3">
<p id="p128961426203312"><a name="p128961426203312"></a><a name="p128961426203312"></a>Только текущее приложение</p>
</td>
<td class="cellrowborder" valign="top" width="47.620000000000005%" headers="mcps1.2.5.1.4">
<p id="p128961426203314"><a name="p128961426203314"></a><a name="p128961426203314"></a>Эта директория предназначена для хранения данных пользователя, таких как настройки и логи.</p>
</td>
</tr>
</tbody>
</table><p id="p118969269332"><a name="p118969269332"></a><a name="p118969269332"></a>internal://app/</p>
</td>
<td class="cellrowborder" valign="top" width="22%" headers="mcps1. 2. 5. 1. 3 ">
<p id="p189612263333"><a name="p189612263333"></a><a name="p189612263333"></a>Только текущее приложение</p>
</td>
<td class="cellrowborder" valign="top" width="47. 620000000000005%" headers="mcps1. 2. 5. 1. 4 ">
<p id="p189612263333"><a name="p189612263333"></a><a name="p189612263333"></a>Эта директория предназначена для хранения данных конкретного приложения и доступна только этому приложению.</p>
</td>
</tr>
</tbody>
</table>
<table>
<tbody>
<tr>
<td class="cellrowborder" valign="top" width="13. 969999999999999%">
<p>Удалена при удалении приложения.</p>
</td>
</tr>
<tr>
<td class="cellrowborder" valign="top" width="13. 969999999999999%">&nbsp;</td>
<td class="cellrowborder" valign="top" width="16. 41%">
<p>&nbsp;internal://share/&nbsp;</p>
</td>
<td class="cellrowborder" valign="top" width="22%">
<p>Все приложения</p>
</td>
<td class="cellrowborder" valign="top" width="47. 620000000000005%">
<p>Удалена при удалении приложения. Другие приложения с предоставленными разрешениями могут читать и записывать файлы в этой директории.</p>
</td>
</tr>
</tbody>
</table>

### Правила использования <a name="section149mcpsimp"></a>API ввода/вывода, предоставляемые подсистемой распределённых файлов, можно разделить на следующие типы в зависимости от модели программирования:

- **Синхронная модель программирования**

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

Пример ниже открывает поток файла в режиме чтения, пытается прочитать первые 4096 байтов, преобразует их в строку, закодированную в UTF-8, а затем закрывает поток файла:

```javascript
import fileio from '@OHOS.distributedfile.fileio';

try {
    var ss = fileio.createStreamSync("tmp", "r");
    buf = new ArrayBuffer(4096);
    ss.readSync(buf);
    console.log(String.fromCharCode.apply(null, new Uint8Array(buf)));
    ss.closeSync();
}
catch (e) {
    console.log(e);
}
```

- **Асинхронная модель программирования: Callback**

В модуле **@OHOS.distributedfile.fileio** API, названия которых не содержат слова **Sync** и которым напрямую передаются callback-функции в качестве входных параметров, реализованы как асинхронная модель с использованием callback. Асинхронная модель с callback также является одним из стандартных асинхронных моделей OHOS. При вызове асинхронного API с переданным callback-обрабатчиком задача выполняется асинхронно, и результат выполнения передается в виде входных параметров зарегистрированного callback-обрабатчика. Первый параметр имеет тип **undefined** или **Error**, что указывает на успешное или неудачное выполнение соответственно.Пример ниже создаёт поток файла асинхронно, асинхронно читает первые 4096 байтов файла при помощи callback-обработчика, вызываемого после создания потока файла, и затем асинхронно закрывает поток файла при помощи callback-обработчика, вызываемого после чтения файла:

```markdown
```javascript
import fileio from '@OHOS.distributedfile.fileio';

try {
    fileio.createStream("./testdir/test_stream.txt", "r", function (err, ss) {
        if (!err) {
            ss.read(new ArrayBuffer(4096), {}, function (err, buf, readLen) {
                if (!err) {
                    console.log('readLen: ' + readLen);
                    console.log('data: ' + String.fromCharCode.apply(null, new Uint8Array(buf)));
                } else {
                    console.log('Не удалось прочитать данные из потока ' + err);
                }
                ss.close(function (err) {
                    console.log(`Поток${err ? ' не' : ''} закрыт`);
                });
            });
        } else {
            console.log('Не удалось открыть поток ' + err);
        }
    });
} catch (e) {
    console.log(e);
}
```
```

Асинхронная модель программирования: Наследие

Все API в модуле **@system.file** реализованы как наследственная асинхронная модель. При вызове такого API вам потребуется реализовать три обратные вызовы (включая **success**, **fail** и **complete**) для вызова при успешном выполнении, сбое или завершении операции соответственно. Если входные параметры корректны, API вызывает обратные вызовы **success** или **fail** в зависимости от того, был ли асинхронный задачи выполнен успешно после её выполнения, и затем вызывает обратный вызов **complete**.    В следующем примере асинхронно проверяется наличие файла, указанного заданным URI, и предоставляются три обратных вызова для вывода результата проверки:

    ```markdown
    import file from '@system.file'

    file.access({
        uri: 'internal://app/test.txt',
        success: function() {
            console.log('access succeeded.');
        },
        fail: function(data, code) {
            console.error('failure callback failed, code: ' + code + ', data: ' + data);
        },
        complete: function () {
            console.log('access completed.');
        }
    });

    console.log("file access test completed")
    ```

## Участвующие репозитории <a name="section178mcpsimp"></a>

- [**distributeddatamgr_file**](https://gitee.com/openharmony/distributeddatamgr_file)
- [filemanagement_dfs_service](https://gitee.com/openharmony/filemanagement_dfs_service)
- [filemanagement_user_file_service](https://gitee.com/openharmony/filemanagement_user_file_service)
- [filemanagement_storage_service](https://gitee.com/openharmony/filemanagement_storage_service)
- [filemanagement_app_file_service](https://gitee.com/openharmony/filemanagement_app_file_service)

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/openharmony-distributeddatamgr_file.git
git@api.gitlife.ru:oschina-mirror/openharmony-distributeddatamgr_file.git
oschina-mirror
openharmony-distributeddatamgr_file
openharmony-distributeddatamgr_file
master