NodeJS fs.open在现有文件上失败(不是路径问题)

时间:2012-02-03 20:16:59

标签: javascript node.js file-io fs

我长期以来一直在处理这个问题,所以非常感谢任何帮助。所以,我正在下载一个文件并使用PhantomJS和CasperJS保存它。我要指出它们不是问题。下载文件没有问题。

问题是NodeJS在下载后无法识别或打开文件。我不能fs.stat,fs.open等。什么都行不通。

我会在一秒钟内分享代码,但这是日志:

Here: bdTcK6hSdownload.csv

[ '2puzZMeLdownload.csv',
  '2s5ICbKNdownload.csv',
  'bdTcK6hSdownload.csv',
  'izIfagwCdownload.csv' ]

fs.js:230

return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);

Error: ENOENT, no such file or directory './caspertemp/bdTcK6hSdownload.csv'

at Object.openSync (fs.js:230:18)
at Object.processCSV (/Users/Home/dev/node_modules/inviter/index.js:64:29)
at /Users/Home/dev/node_modules/inviter/index.js:36:33
at ChildProcess.exithandler (child_process.js:281:7)
at ChildProcess.emit (events.js:70:17)
at maybeExit (child_process.js:361:16)
at Process.onexit (child_process.js:397:5)

如您所见,我打印出创建的文件名,然后打印目录的内容,然后尝试打开该文件。如您所见,bdTcK6hSdownload.csv存在于目录中,但在打开时失败。

简单的代码段在这里:

console.log('Here: ' + filename);

filenames = fs.readdirSync('./caspertemp/');
console.log(filenames);

var fd = fs.openSync('./caspertemp/' + filename, 'r');
console.log(fd);

在此之前和之后还有更多的事情发生,但由于这个基本功能失败,所以没有任何重要事项。请帮忙!这已经唠叨了几个星期。

3 个答案:

答案 0 :(得分:3)

我的猜测是,这是当前工作目录中的差异。您是否从同一目录启动casperJS和node.js进程?他们中的任何一个在运行时更改工作目录吗?尝试这样的事情,节点的__dirname将为您提供当前正在执行的.js文件的目录路径

var path = require("path");
var filename = "bdTcK6hSdownload.csv";
var csvPath = path.resolve(path.join(__dirname, "caspertemp", filename));
console.log(csvPath);

答案 1 :(得分:0)

另一种可能性是计时。

我曾经遇到过这样的情况:文件条目会立即出现在文件夹中,但文件无法使用,因为编写它的文件要么尚未完成,要么尚未释放它的句柄。在这种情况下,需要延迟处理或进行其他检查以确定是否已准备就绪并不罕见。

在这种情况下,可能是重启'修复'的东西,但只是因为副作用它会释放句柄或延迟处理,所以当你的代码再次尝试时,一切都很好。

答案 2 :(得分:0)

文件扩展名可以输入两次,因此找不到。使用命令提示符导航到文件目录,并获取该目录中的文件列表

命令:

dir

ls

获取实际文件名并使用它。在我的情况下,我已将文本文档保存为“readMe.txt”,并在命令提示符下显示为“readMe.txt.txt”。保存时我没有附加文件扩展名,这就产生了问题。