Cordova でローカルファイルをホニャホニャする


バージョンに依ってだとか、W3CのDraftやRFCに依って変化が激しくて、このあたりを触る度にネットの渦に巻かれるのでメモ。

ファイル初期化したいんだよう

cordova.file.checkFile(): Promise

この子で良いのは良いのだけど、Promise で boolean が返るなら、ある/なしが .then() の中で判定できると思ったら大間違い。
無いときは error 側に流れます(X_X)

  /// constructor で `file: File` で cordova-plugin-file が inject されてる前提
  /// DirectoryEntry, FileEntry は cordova-plugin-file から import してください。
  /// import { DirectoryEntry, File, FileEntry } from '@ionic-native/file';

  const fileName: string = "FileFile.txt";

  return new Promise( (resolve, reject) => {
    this.file.checkFile( this.file.dataDirectory, fileName)
    .then( (/* isExists */) => {
      // ファイルあるよー
      window.resolveLocalFileSystemURL( this.file.dataDirectory, (dirEntry: DirectoryEntry) => {
        dirEntry.getFile(fileName, {create: false, exclusive: false}, (fileEntry: FileEntry) => {
          resolve(fileEntry);
        }, (er) => {
          reject(er);
        });
      });
    }, () => {
      // ファイルないよー
      this.file.createFile(this.file.dataDirectory, fileName, true)
      .then( (fileEntry) => {
        resolve(fileEntry);
      })
      .catch( (er) => {
        reject(er);
      });
    })
    .catch( (er) => {
      reject(er);
    });
  });