Как проверить, существует ли файл в 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)
Обновленный код с решением 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')
}
}