HarmonyOS 调用重命名方法对私有文件重命名后,出现两个文件

调用fs.renameSync(filePath, newPath)对文件进行重命名成功,但退出应用后再次进入,会存在filePath和newPath两个文件,这不正常

HarmonyOS
2天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
shlp

确认每次重新进入应用的时候,有没有对这个原始文件进行初始化,或者拷贝

本地代码如下:

// Index.ets
import fs, { ListFileOptions } from '@ohos.file.fs';
import { writeFile } from '../FileFs';

@Entry
@Component
struct Index {
  build() {
    Column() {
      Button('写文件')
        .onClick(() => {
          this.upload('top_bg.png');
        })
      Button('列出文件')
        .onClick(() => {
          let listFileOption: ListFileOptions = {
            recursion: false
          };
          let context: Context = getContext(this);
          let cacheDir: string = context.cacheDir;
          let filenames = fs.listFileSync(cacheDir, listFileOption);
          console.info("listFile succeed");
          for (let i = 0; i < filenames.length; i++) {
            console.info("filename: %s", filenames[i]);
          }
        })
      Button('&#37325;&#21629;&#21517;')
        .onClick(() =&gt; {
        let context: Context = getContext(this);
        let cacheDir: string = context.cacheDir;
        let srcFile = cacheDir + &#34;/top_bg.png&#34;;
        let dstFile = cacheDir + &#34;/top_bg-222.png&#34;;
        fs.renameSync(srcFile, dstFile);
      })
    }
    .height('100%')
    .width('100%')

  }
  // 把 rawfile 目录中的证书文件,拷贝到应用沙箱目录 cache 目录
  upload(fileName: string) {
    let context: Context = getContext(this);
    let ca: Uint8Array = context.resourceManager.getRawFileContentSync(fileName);
    let cacheDir: string = context.cacheDir;
    try {
      writeFile(cacheDir, fileName, ca.buffer);
    } catch (err) {
      console.error("FILE-PATH-DEMO:", JSON.stringify(err))
    }
  }
}

// FileFs.ets
import fs from '@ohos.file.fs';
import hilog from '@ohos.hilog';

const TAG = '[tpc].[axios]';
const DOMAIN = 0x0001

const writeFile = (path: string, name: string, content: string | ArrayBuffer): void => {
  if (!fs.accessSync(path)) {
    fs.mkdirSync(path);
  }
  hilog.info(DOMAIN, TAG, `write file path = ${path}`);
  let file = fs.openSync(`${path}/${name}`, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE);
  fs.writeSync(file.fd, content);
  fs.fsyncSync(file.fd);
  fs.closeSync(file);
}


export { writeFile }
分享
微博
QQ
微信
回复
2天前
相关问题
JSON反序列化,如何重命名字段?
250浏览 • 1回复 待解决
HarmonyOS ets文件,合并两个Record记录
561浏览 • 1回复 待解决
HarmonyOS ArkTS有命名空间吗
502浏览 • 1回复 待解决
HarmonyOS 应用的包名命名规则
966浏览 • 1回复 待解决
HSP的命名路由跳转疑问
295浏览 • 1回复 待解决
如何实现router命名路由跳转
1092浏览 • 1回复 待解决
HarmonyOS 两个同级的组件问题
420浏览 • 1回复 待解决
ets文件怎么调用ts文件中定义的方法
3074浏览 • 1回复 待解决
HarmonyOS 两个枚举类型之间转换问题
152浏览 • 1回复 待解决
HarmonyOS 如何比较两个日期的大小?
301浏览 • 1回复 待解决
两个设备控制相关问题
9066浏览 • 3回复 已解决
元服务包名命名需要使用什么格式
1649浏览 • 1回复 待解决