HarmonyOS 鸿蒙Next '@ohos.file.fs' 中listFileSync方法参数ListFileOptions的filter中suffix过滤无效

HarmonyOS 鸿蒙Next ‘@ohos.file.fs’ 中listFileSync方法参数ListFileOptions的filter中suffix过滤无效 我尝试使用鸿蒙API的@ohos.file.fs库,然后在listFileSync方法中传入了截图中的参数,我不确定是否是我的用法不对,还是本身的issue,通过ListFileOptions传入的suffix过滤参数无效

2 回复

sourcePath的路径确定是否为沙箱路径下:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/application-context-stage-0000001820999605#ZH-CN_TOPIC_0000001857915861__

按照你的过滤suffix,是能查出来文件的

import fs, { ListFileOptions } from '@ohos.file.fs';
import common from '@ohos.app.ability.common';

@Entry
@Component
struct Page2 {
  build() {
    Column() {
      Button('createFile')
        .onClick(() => {
          this.createFile()
        })
      Button('getListFile')
        .onClick(() => {
          this.getListFile()
        })
    }
  }

  //创建文件至应用沙箱下
  createFile(): void {
    // 获取应用文件路径
    let context = getContext(this) as common.UIAbilityContext;
    let filesDir = context.filesDir;

    let file = fs.openSync(filesDir + '/test.txt', fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
    let writeLen = fs.writeSync(file.fd, 'Try to write str.');
    console.info('The length of str is: ' + writeLen);
    fs.closeSync(file);

    let dirPath = filesDir + '/upload';
    fs.mkdirSync(dirPath, true);

    let file2 = fs.openSync(dirPath + '/word', fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
    let file3 = fs.openSync(dirPath + '/word.doc', fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
    let file4 = fs.openSync(dirPath + '/index.html', fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);

    let writeLen2 = fs.writeSync(file2.fd, '我是word.');
    let writeLen3 = fs.writeSync(file3.fd, '我是word.doc.');
    let writeLen4 = fs.writeSync(file4.fd, '我是html.');

    console.info('我是word: ' + writeLen2);
    console.info('我是word.doc: ' + writeLen3);
    console.info('我是html: ' + writeLen4);

    fs.closeSync(file2);
    fs.closeSync(file3);
    fs.closeSync(file4);
  }

  // 查看应用沙箱下文件列表
  getListFile() {
    // 获取应用文件路径
    let context = getContext(this) as common.UIAbilityContext;
    let filesDir = context.filesDir + '/upload';

    let listFileOption: ListFileOptions = {
      recursion: false,
      listNum: 0,
      filter: {
        suffix: ['.txt'],
        fileSizeOver: 0,
      }
    };

    let files = fs.listFileSync(filesDir, listFileOption);
    for (let i = 0; i < files.length; i++) {
      console.info(`The name of file: ${files[i]}`);
    }
  }
}

测试多个文件过滤有效,没能复现你的问题

import fs, { ListFileOptions } from '@ohos.file.fs';
import common from '@ohos.app.ability.common';

@Entry
@Component
struct Page2 {
  build() {
    Column() {
      Button('createFile')
        .onClick(() => {
          this.createFile()
        })
      Button('getListFile')
        .onClick(() => {
          this.getListFile()
        })
    }
  }

  //创建文件至应用沙箱下
  createFile(): void {
    // 获取应用文件路径
    let context = getContext(this) as common.UIAbilityContext;
    let filesDir = context.filesDir;

    let file = fs.openSync(filesDir + '/test.txt', fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
    let writeLen = fs.writeSync(file.fd, 'Try to write str.');
    console.info('The length of str is: ' + writeLen);
    fs.closeSync(file);

    let dirPath = filesDir + '/upload';
    fs.mkdirSync(dirPath, true);

    let file2 = fs.openSync(dirPath + '/word', fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
    let file3 = fs.openSync(dirPath + '/word.doc', fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
    let file4 = fs.openSync(dirPath + '/index.html', fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);

    let writeLen2 = fs.writeSync(file2.fd, '我是word.');
    let writeLen3 = fs.writeSync(file3.fd, '我是word.doc.');
    let writeLen4 = fs.writeSync(file4.fd, '我是html.');

    console.info('我是word: ' + writeLen2);
    console.info('我是word.doc: ' + writeLen3);
    console.info('我是html: ' + writeLen4);

    fs.closeSync(file2);
    fs.closeSync(file3);
    fs.closeSync(file4);
  }

  // 查看应用沙箱下文件列表
  getListFile() {
    // 获取应用文件路径
    let context = getContext(this) as common.UIAbilityContext;
    let filesDir = context.filesDir + '/upload';

    let listFileOption: ListFileOptions = {
      recursion: false,
      listNum: 0,
      filter: {
        suffix: ['.txt'],
        fileSizeOver: 0,
      }
    };

    let files = fs.listFileSync(filesDir, listFileOption);
    for (let i = 0; i < files.length; i++) {
      console.info(`The name of file: ${files[i]}`);
    }
  }
}

更多关于HarmonyOS 鸿蒙Next '@ohos.file.fs' 中listFileSync方法参数ListFileOptions的filter中suffix过滤无效的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,关于@ohos.file.fs模块中的listFileSync方法,如果在使用ListFileOptionsfilter属性时设置suffix过滤无效,可能是因为以下几个原因:

  1. 参数格式错误:确保suffix参数的值是正确的字符串格式,且应只包含文件后缀名(例如".txt"),不包括路径或文件名前缀。

  2. API版本支持:检查你所使用的鸿蒙系统版本是否支持通过suffix进行文件过滤。某些早期版本或特定配置可能不支持该特性。

  3. 路径权限:确保你的应用有权限访问目标目录。权限不足可能导致过滤无效,即使代码逻辑正确。

  4. 实现细节:listFileSync方法的实现可能依赖于底层文件系统的支持。如果底层文件系统对后缀过滤有特定限制或不支持,也可能导致此问题。

  5. 编码问题:检查代码中字符串的编码是否与文件系统编码一致,不一致可能导致匹配失败。

针对上述问题,建议检查代码中的参数设置、系统文档以及权限配置。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部