【问题标题】:NodeJS: Remove either file/folder based on a path without extension (Design approach)NodeJS:根据没有扩展名的路径删除文件/文件夹(设计方法)
【发布时间】:2017-05-01 01:38:33
【问题描述】:

我正在尝试根据不包含扩展名的路径删除文件或文件夹。


假设我有以下路径:

/home/tom/windows

windows 可以是名为 windows 的文件夹或名为 windows.txt 的文件

由于路径本身不包含扩展名(.txt),脚本需要猜测是应该删除文件夹(如果有)还是文件(如果有)。

初步方法:

fs.stat(path, (err, stats) ->

/* ---------- RUN IF PATH IS VALID ---------- */

// If we don't have any erros and the path is a directory, 
// simply remove that directory and end here

if (!err && stats.isDirectory())
    fs.rmdir(path, (err) ->
        if (err) then return done(err)

        return done(null, 1)
    )

/* ---------- ---------- ---------- ---------- -- */


/* ---------- RUN IF PATH IS NOT VALID ---------- */

// If we have an error other than "ENOENT" (non-existend file) 
// then return

if (err.code != 'ENOENT') then return done(err)


// Now we know that the path must be a file, thus verify
// its type and extension then unlink

fs.stat(path + '.txt', (err, stats) ->
    if (err) then return done(err)
    if (!stats.isFile()) then return done(err)

    fs.unlink(path + '.txt', (err) ->
        if (err) then return done(err)

        done(null, 1)
    )

)

说明:

通过 fs.stat 测试路径是否存在,然后检查它是否是目录。 如果它是一个目录,只需将其删除并结束执行。

如果上一步中的条件不匹配,则继续。 检查条件不匹配的原因(err.code)。 如果错误不是针对不存在的文件,则结束执行。

[其他]

继续,因为我们知道路径必须是文件,因为我们之前检查过它是否是目录。 附加扩展名 (.txt) 并确保该文件确实存在。 如果是这样,只需取消链接文件。


另一种方法:

我可以将扩展名直接附加到路径并使用 fs.unklink() 并测试名为 EISDIR 的错误代码。如果为 false,则路径必须是有效文件,因此将其删除。如果为真,删除目录

fs.unlink(path + '.txt', (err) ->
    //Path is a valid file, thus remove
    if (!err) then return done(null, 1)

    //Path is not valid file, thus check if directory
    if (err.code != 'ENOENT' && err.code != 'EISDIR')
      return done(err)

    //Path is directory so remove it
    fs.rmdir(path, (err) ->
        if (err) then return done(err)

        done(null, 1)
    )
)

结论?

是否有任何改进、解决方案或设计概念?

【问题讨论】:

  • 你确定你没有想太多?
  • 我知道这很复杂,但最后我也想在其他 FS 方法上使用这种方法。例如rename()。问题是路径事先不包含扩展名。
  • 一点都不复杂,所以才奇怪你为什么这么关心。
  • 谢谢@DaveNewton 我很担心,因为我最初的方法很繁重。我认为第二种方法是要走的路。我不知道这是否可以进一步改进,
  • 我个人更喜欢第一种方法。一点都不重,就是十几行代码……

标签: javascript node.js coffeescript fs


【解决方案1】:

几个月前我写了一个nodeJS模块解决了这个问题。

引擎使用承诺的异步控制流基于路径捕获文件夹和/或文件。这正是我所需要的。

文件夹和文件是否共享相同的名称或扩展名是否未知都没有关系。 引擎会根据提供的选项尝试捕获其中一个。

该模块是开源的,可通过 NPM 和 Github 获得:

https://github.com/Burnett01/fs-capture

https://www.npmjs.com/package/fs-capture

【讨论】:

    猜你喜欢
    • 2021-12-13
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    • 1970-01-01
    • 2016-12-16
    相关资源
    最近更新 更多