javascript - 如何测试 Tabris 中是否存在文件?

标签 javascript file-exists tabris tabris-js

这是一个在 Tabris 中读取和写入文件的示例(在 Playground 上运行)。 (这可能是一个很好的片段,有助于理解 iOS/Android/Windows 上的“路径”)

如果您尝试读取不存在的文件,则会报告一般错误。

如何测试文件是否存在?

我尝试了一些 Nodejs 方法,但没有成功。

谢谢

代码

const {fs, Button, TextView, TextInput, ui} = require('tabris')

const FILENAME = 'hello.txt'
const FILEPATH = fs.filesDir + '/' + FILENAME

console.log(FILEPATH)

let btnReadFile = new Button({
  centerX: 0,  top: 'prev() 10', width: 200,
  text: 'Read File: ' + FILENAME
}).appendTo(ui.contentView)

btnReadFile.on('select', () => {
  fs.readFile(FILEPATH, 'utf-8')
    .then(text => txiFile.text = text)
    .catch(err => console.error(err))
})

let btnWriteFile = new Button({
  centerX: 0,  top: 'prev() 10', width: 200,
  text: 'Write File: ' + FILENAME
}).appendTo(ui.contentView)

let btnRemoveFile = new Button({
  centerX: 0,  top: 'prev() 10', width: 200,
  text: 'Remove File: ' + FILENAME
}).appendTo(ui.contentView)

btnWriteFile.on('select', () => {
  fs.writeFile(FILEPATH, txiFile.text, 'utf-8')
    .then(() => console.log('file written:', FILEPATH))
    .catch(err => console.error(err))
})

btnRemoveFile.on('select', () => {
  txiFile.text = ''
  fs.removeFile(FILEPATH)
    .then(() => console.log('file removed:', FILEPATH))
    .catch(err => console.error(err))
})

let txiFile = new TextInput({
  top: 'prev() 20', left: '20%', right: '20%', height: 100,
  type: 'multiline'
}).appendTo(ui.contentView)

屏幕截图 screenshot on iOS

<小时/>

使用 fs.readDir 解决方案更新代码不起作用...

函数总是返回false - 但在async function()内我看到它正在工作,并且filesDir正确列出了文件。

const FILENAME = 'helloxxppp.txt'
const FILEPATH = fs.filesDir
const FULLFILEPATH = FILEPATH + '/' + FILENAME

console.log('FILENAME: \n ' + FILENAME)
console.log('FILEPATH: \n ' + FILEPATH)
console.log('FULLFILEPATH \n: ' + FULLFILEPATH)

// this ALWAYS is false
if (fileExist(FILEPATH, FILENAME)) {
  console.log('File NOT exists\n')
} else {
  console.log('File exists\n')
}

async function fileExist (path, file) {
  let files
  try {
    files = await fs.readDir(path)
    console.log(files)
  } catch (err) {
    return false
  }
  return files.indexOf(file) > -1
}

最佳答案

异步/等待版本:

const {fs} = require('tabris')

async function fileExist(path, file) {
  let files
  try {
    files = await fs.readDir(path)
  } catch (err) {
    return false
  }
  return files.indexOf(file) > -1
}

promise 版本:

const {fs} = require('tabris')

function fileExist(path, file) {
  return new Promise((resolve, reject) => {
    fs.readDir(path)
      .then(files => resolve(files.indexOf(file) > -1))
      .catch(err => resolve(false)) // Error is ignored intentionally
  })
}

用法:

1) 使用then:

const FILENAME = 'helloxxppp.txt'
const FILEPATH = fs.filesDir

fileExist(FILEPATH, FILENAME).then((exist) => {
  if (exist) {
    console.log('File NOT exists\n')
  } else {
    console.log('File exists\n')
  }
})

2)使用async/await:

async myFunction() {
  // code here
  let exist = await fileExist(FILEPATH, FILENAME)
    if (exist) {
    console.log('File NOT exists\n')
  } else {
    console.log('File exists\n')
  }
}

关于javascript - 如何测试 Tabris 中是否存在文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51384239/

相关文章:

javascript - 如何在创建后引用没有 id、没有类的 Tabrisjs 小部件

ios - Tabris 0.11 iOS EXC_BAD_ACCESS 地理定位

python - os.path.isfile() 为 linux smb 网络驱动器上的文件返回 false

ios - 我的文件存在,但 fileExistsAtPath 总是返回 false

Javascript/HTML/CSS 命运之轮仅按差异旋转?

javascript - Persistence.js 在两个方向上添加多对多

c++ - C++ 检查文件是否存在

javascript - 使用 Tabris-js,并尝试使用 cordova 文件和文件传输插件

javascript - 在 jQuery 中使以下内容动态化

javascript - Gulp 中的 Babel 对象分配插件