Node.js 最佳实践检查文件是否存在

2024-04-19

使用 Node.js 检查文件是否存在的最佳实践是什么?

在这里的其他问题中,我看到很多答案都说使用fs.exists

But the docs http://nodejs.org/api/fs.html#fs_fs_exists_path_callback say:

特别是,在打开文件之前检查文件是否存在是一种反模式,使您容易受到竞争条件的影响:另一个进程可能会在调用 fs.exists() 和 fs.open() 之间删除该文件。只需打开该文件并在该文件不存在时处理错误即可。

打开文件时会发生什么?它是否会保持打开状态直到您关闭它(这是泄漏吗?)?那么,打开文件后是否必须关闭它?如果我使用fs.exists我也打开该文件吗?

这是否意味着检查文件是否存在的最佳方法是:

fs.open('path/file.js', function(err, fd) {
    if (err && err.code == 'ENOENT') {
        // Does not exist
    } else if (!err) {
        // Does exist
        fs.close(fd);
    } else {
        // Some other error
    }
}

打开文件时会发生什么?它是否会保持打开状态直到您关闭它(这是泄漏吗?)?

是的,如果您打开文件,则必须将其关闭。否则它将保持打开状态,直到您的进程终止。

如果我使用 fs.exists 我也打开该文件吗?

只需致电fs.exists()不打开该文件,因此无需关闭任何内容。

如果您有理由只检查文件是否存在,则应该使用fs.exists()。文档说,如果您真正想做的是打开文件,则无需检查fs.exists()预先。如果您想打开一个文件,只需尝试打开它并处理错误即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node.js 最佳实践检查文件是否存在 的相关文章

随机推荐

  • 如果没有 sudo,则无法在 Qt 应用程序中使用键盘

    我有一个在 BeagleBone Black 上运行的交叉编译的嵌入式 Qt 应用程序 它工作正常 但有一件事 如果我不直接在 BeagleBone Black 上运行 它不接受键盘输入sudo 这是一个问题 因为 我无法远程调试应用程序并
  • 如何将多个 Range 对象合并为一个,用作图表源

    我正在尝试制作一个图表 其中多列作为源区域 基本上 我想选择特定的列 跳过一些列 然后将它们全部合并到一个范围中 我设置了一个循环 在其中创建一个范围 并将其地址附加到一个字符串中 并用逗号分隔它们 我很确定这就是 Excel 想要的格式
  • 无法添加自定义 Sonos 服务的帐户

    我创建了 Sonos 音乐服务 并使用 Customsd 将其添加到我的扬声器中 两个端点 URL 常规和安全 均可用 服务已成功添加到扬声器 使用 SoapUI 我可以发送 GetSessionId 的 https 请求 它会返回有效的响
  • textbox1.Text 无法从另一个表单复制 textbox2.Text 值[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 下面是我的代码 private void btnCptKb5 Click object sender EventArgs e Form1 f
  • 最大重叠矩形数

    我看过这个面试问题 但不知道如何回答 给定 N 个矩形 找出重叠矩形的最大数量 例如 对于左下点和右上点表示的矩形 1 1 3 3 2 2 4 4 1 3 2 4 2 2 3 3 返回 3 因为前两个和最后一个矩形重叠 我可以想到一个时间复
  • 努力绑定 tkinter 文本小部件中的标签

    我在 tkinter 模块中的文本小部件上遇到了一些困难 我添加了尝试将函数绑定到的标签 无论我如何输入 它都会发生以下两种情况之一 我可以单击文本小部件 但弹出的唯一功能是最后一个项目 无论我单击何处 第二件事是它会自动输出所有功能 对原
  • 使用 PIVOT 选择列值作为列

    我有一个场景 我希望将每个唯一列值 Val2 的列值 Val1 显示为单个列 最多 10 列 CREATE TABLE TEMP1 Val1 NVARCHAR 4 Val2 NVARCHAR 10 insert into Temp1 Val
  • 如何确定 .NET 中显示器的真实像素大小?

    我想在我的应用程序中以 真实尺寸 显示图像 为此 我需要知道显示器的像素大小 我知道 Windows 显示分辨率名义上是 96dpi 但出于我的目的 我想要更好的猜测 我知道这些信息可能并不总是可用或准确 例如较旧的 CRT 显示器 但我想
  • 如何覆盖 Material-UI MenuItem 选择的背景颜色?

    目前我正在努力设置背景颜色MenuItem选择不同颜色的组件 无需使用 important 来强制执行 组件代码
  • 检测 Javascript 中的操作系统版本并重定向

    Good Day 我做了一些研究 发现你可以使用以下 javascript 来检测用户操作系统 无论是 Android iOS Windows 等 var OSName Unknown OS if navigator appVersion
  • 如何将 Font Awesome 与 Polymer LitElement 结合使用

    我无法让 Font Awesome 图标与 LitElement 一起使用 因为 CSS 样式不会穿透自定义元素的阴影边界 是否可以将 Font Awesome 或其他图标与 LitElement 一起使用 聚合物材料库中有材料图标 那里使
  • xsl 尝试输出“<”而不是“<”

    Update 尽管与以前不太一样 但问题仍然存在 下面是输入内容 输出内容以及我想要输出内容的示例 输入示例 amp lt p amp gt amp lt span style amp quot font size medium amp q
  • Python - 查找字典中最长(最多单词)的键

    有没有一种方法可以快速查询字典对象以找到单词最多的键 所有键都是字符串类型 即 如果具有最大键的项目有五个单词 这是最大的键 3 我如何快速查询字典并返回 int 5 最好的 乔治娜 这将为您提供密钥 max d key lambda x
  • 如何使默认隐藏的控件显示在 Visual Studio 2010 WPF 设计器中?

    我有一个具有隐藏可见性的控件 因为它绑定到视图模型中的一个属性 该属性的默认值导致它被隐藏 我可以通过 XAML 访问它 但我希望它仍然显示在设计器中 有没有一种干净的方法可以做到这一点 目前 我正在手动编辑 可见性 属性以使其显示出来 但
  • 针对 PyPy 进行优化

    这是后续PyPy 的统计分析器 https stackoverflow com questions 17346226 statistical profiler for pypy 我正在 PyPy 下运行一些 Python 代码 并希望对其进
  • 导航抽屉打开时变暗/变暗/模糊活动

    我在用LDrawer https github com ikimuhendis LDrawer在我的项目中 当导航抽屉打开时 我需要使承载导航抽屉的活动变暗 变暗 模糊 我在 Stackoverflow 上遇到过类似的问题 但没有找到令人满
  • Android Studio 打开几分钟后就崩溃了

    我在 Windows 10 上安装了 Android Studio 最新版本 在打开和完成打开项目几分钟后它崩溃了 我在互联网上寻找解决方案 但一直未能找到解决方案 每次崩溃时我都会收到文本错误报告 我对 Android Studio 的了
  • 在 SQL Server 2008 中使用 XPath/XQuery 将一个属性与另一个属性匹配

    考虑 XML 和 SQL declare xml xml
  • 更改 django admin 中持续时间字段的格式

    我在用着django DurationField在模型中计算两个之间的时间差DateTimeField 在该模型的管理网站上 该字段显示如下 short duration Cumulative Total time 0 51 33 long
  • Node.js 最佳实践检查文件是否存在

    使用 Node js 检查文件是否存在的最佳实践是什么 在这里的其他问题中 我看到很多答案都说使用fs exists But the docs http nodejs org api fs html fs fs exists path ca