目录

File Opening

Use Cases

Common apps cannot directly access files at a common path. To address this problem, Enterprise Data Guard Kit provides APIs for apps to obtain the file descriptor (FD) of a file for opening it.

API Description

For details about these APIs, please refer to the API Reference.

API Description
openFile(path: string, callback: AsyncCallback<number>): void Opens a file in a specified path and obtains the FD using a callback.
openFile(path: string): Promise<number> Opens a file in a specified path and obtains the FD using a promise.
openFileWrite(path: string, callback: AsyncCallback<number>): void Opens a file in the personal data directory of a user and obtains the FD in write-only mode using a callback.
openFileWrite(path: string): Promise<number> Opens a file in the personal data directory of a user and obtains the FD in write-only mode using a promise.

Development Procedure

  1. Import required modules.

    import { BusinessError } from '@kit.BasicServicesKit';
    import { fileGuard } from '@kit.EnterpriseDataGuardKit';
    import { hilog } from '@kit.PerformanceAnalysisKit';
  2. Initialize the guard object of FileGuard, call the openFile API, and use either of the following methods to open a file and obtain the FD of the file in the specified directory:

    • Open a file in a specified path and obtain the FD using a callback.

      const TAG: string = 'FileGuard_OpenFile';
      const DOMAIN: number = 0x0000;
      
      /**
       * Open a file and return the result asynchronously using a callback.
       */
      function openFileCallback() {
        let guard: fileGuard.FileGuard = new fileGuard.FileGuard();
        let path: string = '/data/service/el2/test/test1.txt';
        guard.openFile(path, (err: BusinessError, fd: number) => {
          if (err) {
            hilog.error(DOMAIN, TAG, `Failed to open file. Code: ${err.code}, message: ${err.message}.`);
            return;
          }
          hilog.info(DOMAIN, TAG, `Succeeded in opening file. path: ${path}, fd: ${fd}.`);
        });
      }
    • Open a file in a specified path and obtain the FD using a promise.

      const TAG: string = 'FileGuard_OpenFile';
      const DOMAIN: number = 0x0000;
      
      // ...
      /**
       * Open a file and return the result asynchronously using a promise.
       */
      function openFilePromise() {
        let guard: fileGuard.FileGuard = new fileGuard.FileGuard();
        let path: string = '/data/service/el2/test/test2.txt';
        guard.openFile(path).then((fd: number) => {
          hilog.info(DOMAIN, TAG, `Succeeded in opening file. path: ${path}, fd: ${fd}.`);
        }).catch((err: BusinessError) => {
          hilog.error(DOMAIN, TAG, `Failed to open file. Code: ${err.code}, message: ${err.message}.`);
        });
      }
  3. Open a file in the personal data directory of a user and obtain the file descriptor in write-only mode. Initialize the guard object of FileGuard, call the openFileWrite API, and use either of the following methods obtain the FD of the file in the specified directory:

    • Open a file in the personal data directory of a user and obtain the FD using a callback.

      const TAG: string = 'FileGuard_OpenFile';
      const DOMAIN: number = 0x0000;
      
      // ...
      /**
       * Open a file in write-only mode and return the result asynchronously using a callback.
       * @param accountId: user ID
       */
      function openFileWriteCallback(accountId: number) {
        let guard: fileGuard.FileGuard = new fileGuard.FileGuard();
        let path: string = `/data/service/el2/${accountId}/hmdfs/account/files/Docs/Documents/aaa.txt`;
        guard.openFileWrite(path, (err: BusinessError, fd: number) => {
          if (err) {
            hilog.error(DOMAIN, TAG, `Failed to open file in write-only mode. Code: ${err.code}, message: ${err.message}.`);
            return;
          }
          hilog.info(DOMAIN, TAG, `Succeeded in opening file in write-only mode. path: ${path}, fd: ${fd}.`);
        });
      }
    • Open a file in the personal data directory of a user and obtain the FD using a promise.

      const TAG: string = 'FileGuard_OpenFile';
      const DOMAIN: number = 0x0000;
      
      // ...
      /**
       * Open a file in write-only mode and return the result asynchronously using a promise.
       * @param accountId: user ID
       */
      function openFileWritePromise(accountId: number) {
        let guard: fileGuard.FileGuard = new fileGuard.FileGuard();
        let path: string = `/data/service/el2/${accountId}/hmdfs/account/files/Docs/Documents/aaa.txt`;
        guard.openFileWrite(path).then((fd: number) => {
          hilog.info(DOMAIN, TAG, `Succeeded in opening file in write-only mode. path: ${path}, fd: ${fd}.`);
        }).catch((err: BusinessError) => {
          hilog.error(DOMAIN, TAG, `Failed to open file in write-only mode. Code: ${err.code}, message: ${err.message}.`);
        });
      }