【问题标题】:Node.js Creating and Deleting a File RecursivelyNode.js 递归创建和删除文件
【发布时间】:2012-03-24 18:11:14
【问题描述】:

我认为有一个 for 循环并创建一个文件 hello.txt 然后通过取消链接将其删除是一个很酷的实验。我想如果 fs.unlink 是 Node 中的删除文件过程,那么 fs.link 必须是创建文件。但是,我的代码只会删除,不会创建,甚至不会创建一次。即使我将 fs.link 代码分离到一个单独的文件中,它仍然不会创建我的文件 hello.txt。

下面是我的代码:

var fs = require('fs'),
for(var i=1;i<=10;i++){
fs.unlink('./hello.txt', function (err) {
    if (err){
        throw err;
    } else {
    console.log('successfully deleted file');
    }
    fs.link('./hello.txt', function (err) {
        if (err){
            throw err;
        } else {
        console.log('successfully created file');
        }
    });
});
}

http://nodejs.org/api/fs.html#fs_fs_link_srcpath_dstpath_callback

谢谢!

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    fs.open() 使用 'w' 参数将用于创建文件。在您继续操作时,您的代码可能会遇到第二个问题,如下所示:

    /srv/node/test $ node makekill.js 
    successfully created file
    successfully created file
    successfully created file
    successfully created file
    successfully created file
    successfully created file
    successfully created file
    successfully created file
    successfully created file
    successfully created file
    successfully closed file
    
    /srv/node/test/makekill.js:13
            throw err;
            ^
    Error: ENOENT, No such file or directory './hello11.txt'
    

    通过一些额外的日志记录,您会看到您使用的代码实际上并没有触发“hello1.txt”到“hello10.txt”的创建操作,然后是相同的删除操作。 (或者在您的示例中,删除,然后是创建,尽管我在调试时更改了这一点,因为创建/删除对我来说更有意义。)

    更重要的是,异步回调似乎都使用最终的“i”值,而不是相关循环期间的“i”值。

    长话短说,我通过创建一个单独的函数来实现这个概念,该函数对给定的文件名执行所需的创建/删除,然后从 for 循环中调用这个函数。这似乎是一种更可靠的方法,可以确保在整个操作序列中使用“i”的预期值,而不是在初始步骤和回调步骤之间进行更改。

    var fs = require('fs');
    
    function openUnlink(name) {
      console.log(name);
      fs.open(name, 'w', function (err) {
        console.log(' + ' + name);
        fs.unlink(name, function (err) {
          console.log('   - ' + name);
        });
      });
    }
    
    for (var i=1;i<=10;i++) {
      openUnlink('hello'+i+'.txt');
    }
    

    【讨论】:

      【解决方案2】:

      fs.link 创建一个符号链接(即它创建一个指向另一个文件的“链接文件”)

      你想要fs.writeFile

      【讨论】:

      • 哦,谢谢。嗯,希望节点有一个在语义上更容易理解的 api
      • 实际上它确实创建了硬链接,而不是符号链接。 en.wikipedia.org/wiki/Hard_link
      【解决方案3】:

      答案是正确的,只是评论为什么。在 Unix 中(这里近似的是 Unix 系统调用 API),unlink 用于删除文件的 链接。如果没有更多的硬链接,则认为该文件已删除。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-21
        • 2013-06-07
        相关资源
        最近更新 更多