Accessing Files Across Devices

The distributed file system provides cross-device file access capabilities for applications. For the same application installed on multiple devices, you can implement read and write of the files in the application's distributed directory (/data/storage/el2/distributedfiles/) across devices by using ohos.file.fs. For example, device A and device B are installed with the same application. After device A and device B are connected to form a Virtual Device, the application on device A can access the files of the same application on Device B. What you need to do is place the files to the distributed directory.

How to Develop

  1. Complete distributed networking for the devices. Connect the devices to a LAN, and complete authentication of the devices. The devices must have the same account number.

  2. Implement cross-device access to the files of the same application. Place the files in the distributedfiles/ directory of the application sandbox to implement access from difference devices.

    For example, create a test file in the distributedfiles/ directory on device A and write data to the file. For details about how to obtain the context in the example, see Obtaining the Context of UIAbility.

    import fs from '@ohos.file.fs';
    
    let context =...; // Obtain the UIAbilityContext information of device A.
    let pathDir = context.distributedFilesDir;
    // Obtain the file path of the distributed directory.
    let filePath = pathDir + '/test.txt';
    
    try {
      // Create a file in the distributed directory.
      let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
      console.info('Succeeded in createing.');
      // Write data to the file.
      fs.writeSync(file.fd, 'content');
      // Close the file.
      fs.closeSync(file.fd);
    } catch (err) {
      console.error(`Failed to openSync / writeSync / closeSync. Code: ${err.code}, message: ${err.message}`);
    }
    

    Read the file on device B.

    import fs from '@ohos.file.fs';
    
    let context =...; // Obtain the UIAbilityContext information of device B.
    let pathDir = context.distributedFilesDir;
    // Obtain the file path of the distributed directory.
    let filePath = pathDir + '/test.txt';
    
    try {
      // Open the file in the distributed directory.
      let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE);
      // Set the buffer for receiving the read data.
      let buffer = new ArrayBuffer(4096);
      // Read the file. The return value is the number of read bytes.
      let num = fs.readSync(file.fd, buffer, {
        offset: 0
      });
      // Print the read data.
      console.info('read result: ' + String.fromCharCode.apply(null, new Uint8Array(buffer.slice(0, num))));
    } catch (err) {
      console.error(`Failed to openSync / readSync. Code: ${err.code}, message: ${err.message}`);
    }