簡體   English   中英

Node.js遞歸創建和刪除文件

[英]Node.js Creating and Deleting a File Recursively

我認為有一個for循環並創建一個文件hello.txt然后用unlink刪除它將是一個很酷的實驗。 我想如果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

謝謝!

fs.link創建一個符號鏈接(即它創建一個指向另一個文件的“鏈接文件”)

你想要fs.writeFile

使用'w'參數的fs.open()將用於創建文件。 在您繼續操作時,您可能會遇到代碼的第二個問題,如下所示:

/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'

通過一些額外的日志記錄,您將看到您正在使用的代碼實際上並未通過“hello10.txt”觸發“hello1.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');
}

答案是正確的,只是評論為什么。 在Unix中(這里是Unix系統調用API),unlink用於刪除文件的鏈接。 當沒有其他硬鏈接時,該文件被視為已刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM