Как проверить, существует ли файл в Tabris?

Вот пример (работает на детской площадке) чтения и записи файла в Tabris.(это может быть хорошим фрагментом, помогающим понять "пути" на 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)

СКРИНШОТ скриншот на 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
}

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
}

Обещающая версия:

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')
  }
}
Другие вопросы по тегам