当前位置: 首页 > news >正文

确保某路径下存在某文件

我有个业务场景的需求,在某个操作前要确保存在某个路径下的某个文件,其实有fsextra库有现成的调用createFile或者ensureFile可以直接拿来用,其源码如下:

'use strict'const u = require('universalify').fromPromise
const path = require('path')
const fs = require('../fs')
const mkdir = require('../mkdirs')async function createFile (file) {let statstry {stats = await fs.stat(file)} catch { }if (stats && stats.isFile()) returnconst dir = path.dirname(file)let dirStats = nulltry {dirStats = await fs.stat(dir)} catch (err) {// if the directory doesn't exist, make itif (err.code === 'ENOENT') {await mkdir.mkdirs(dir)await fs.writeFile(file, '')return} else {throw err}}if (dirStats.isDirectory()) {await fs.writeFile(file, '')} else {// parent is not a directory// This is just to cause an internal ENOTDIR error to be thrownawait fs.readdir(dir)}
}function createFileSync (file) {let statstry {stats = fs.statSync(file)} catch { }if (stats && stats.isFile()) returnconst dir = path.dirname(file)try {if (!fs.statSync(dir).isDirectory()) {// parent is not a directory// This is just to cause an internal ENOTDIR error to be thrownfs.readdirSync(dir)}} catch (err) {// If the stat call above failed because the directory doesn't exist, create itif (err && err.code === 'ENOENT') mkdir.mkdirsSync(dir)else throw err}fs.writeFileSync(file, '')
}module.exports = {createFile: u(createFile),createFileSync
}

我看了下,感觉不太满意。用node.js自带的fs模块的话,要有好几步操作:检查文件状态,存在则返回,不存在的话,创建目录,创建空文件

function ensureFile(file) {return fs.promises.access(file).catch(e=>{return fs.promises.open(file, 'w').catch(e=>{ return fs.promises.mkdir(path.dirname(file), { recursive: true }).then(()=>{ return fs.promises.open(dest_path, 'w'); }); }).then(fd=>{ return fd.close(); });});}

另外关于创建空文件,虽然fs.writeFile(file,‘’)只需要一条语句,我打开和关闭文件需要两条语句,个人理解实际开销可能后者更小一些。


http://www.mrgr.cn/news/80506.html

相关文章:

  • 【Ubuntu】安装QQ
  • 景联文科技入选中国信通院发布的“人工智能数据标注产业图谱”
  • STM32F407ZGT6-UCOSIII笔记2:UCOSIII任务创建实验-Printf 函数卡住 UCOSIII 系统问题解决
  • JAVA学习日记(二十六)网络编程
  • 优选算法《双指针》
  • 二、HTML5
  • 作业Day5:
  • Mapbox-GL 的源码解读的一般步骤
  • 放大电路3
  • 类OCSP靶场-Kioptrix系列-Kioptrix Level 3
  • Vue.js前端框架教程5:Vue数据拷贝和数组函数
  • 一学就废|Python基础碎片,reduce函数
  • Python毕业设计选题:基于django+vue的宠物服务管理系统
  • 思考:VSCode 的宏观工作原理 快速入门 VSCodium (****)
  • 数字电视标准与分类
  • Kafka部署
  • 解决PyTorch模型推理时显存占用问题的策略与优化
  • 【BUG记录】Apifox 参数传入 + 号变成空格的 BUG
  • C-数据的存储
  • android opencv导入进行编译
  • Vue3期末复习
  • MySQL中Json字段
  • MySQL数据库sql教程-从入门到进阶
  • 【Linux】结构化命令:if-then语句
  • 基于python绘制数据表(下)
  • 一、基于langchain使用Qwen搭建金融RAG问答机器人--技术准备