HarmonyOS fs.open问题?

如何实现文件不存在则创建,存在则清空内容,然后再写入,即覆盖写入的内容?

阅读 512
1 个回答

示例参考如下:

import { filePreview } from '@kit.PreviewKit';
import { promptAction } from '@kit.ArkUI';
import { fileIo as fs, fileUri } from '@kit.CoreFileKit';

@Entry
@Component
struct Index {
  @State message: string = 'Hello World';
  private fileName: string = 'preview_info.txt';

  build() {
    Row() {
      Column() {
        Button('openPreview')
          .onClick(async () => {
            let context = getContext(this);
            let fileDir = context.filesDir; // 获取沙箱路径
            let filePath = fileDir + '/' + this.fileName;
            let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE | fs.OpenMode.TRUNC); // 创建文件
            let uri = fileUri.getUriFromPath(filePath); // 获取uri
            let str: string = "hello, world";
            let writeLen = fs.writeSync(file.fd, str); // 写入文件
            console.info("write data to file succeed and size is:" + writeLen);
            fs.closeSync(file);
            let result = await filePreview.canPreview(context, uri); // 传入uri,判断是否可预览
            if (result) {
              let previewInfo: filePreview.PreviewInfo = {
                title: this.fileName,
                uri: uri,
                mimeType: 'text/plain'
              }
              filePreview.openPreview(getContext(this), previewInfo); // 打开预览
            } else {
              promptAction.showToast({
                // 不可预览
                message: '文件不可预览'
              });
            }
          })
        Button('openPreview2')
          .onClick(async () => {
            let context = getContext(this);
            let fileDir = context.filesDir; // 获取沙箱路径
            let filePath = fileDir + '/' + this.fileName;
            let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE | fs.OpenMode.TRUNC); // 创建文件
            let uri = fileUri.getUriFromPath(filePath); // 获取uri
            let str: string = "xxxx, xxxxxxxxxxxxxxxxxx";
            let writeLen = fs.writeSync(file.fd, str); // 写入文件
            console.info("write data to file succeed and size is:" + writeLen);
            fs.closeSync(file);
            let result = await filePreview.canPreview(context, uri); // 传入uri,判断是否可预览
            if (result) {
              let previewInfo: filePreview.PreviewInfo = {
                title: this.fileName,
                uri: uri,
                mimeType: 'text/plain'
              }
              filePreview.openPreview(getContext(this), previewInfo); // 打开预览
            } else {
              promptAction.showToast({
                // 不可预览
                message: '文件不可预览'
              });
            }
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进