我认为有一个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
谢谢!
答案 0 :(得分:2)
fs.link
创建一个符号链接(即它创建一个指向另一个文件的“链接文件”)
您需要fs.writeFile
答案 1 :(得分:2)
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');
}
答案 2 :(得分:0)
答案是正确的,只是评论为什么。在Unix中(这里是Unix系统调用API),unlink用于删除文件的 hard 链接。当没有其他硬链接时,该文件被视为已删除。