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

我一直在处理这个很长一段时间,所以任何帮助非常感激。 所以,我正在下载一个文件并使用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) 

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

简单的代码片段在这里:

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

在这之前和之后还有更多的事情,但没有关系,因为这个基本function失败了。 请帮忙! 这已经唠叨了几个星期了。

我的猜测是这是目前工作目录中的差异。 你是从同一个目录启动casperJS和node.js进程吗? 他们中的任何一个在运行时改变工作目录? 尝试这样的,其中节点的__dirname会给你当前正在执行的.js文件的目录path

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

另一种可能是时机。

过去我曾经遇到过这样一种情况:文件夹出现在文件夹中,但文件不可用,因为写入的文件没有完成,也没有被释放。 在这种情况下,推迟处理或者进行一些其他检查以确定事情是否准备就不足为怪了。

在这种情况下,重启可能会“修复”一些事情,但只是因为副作用,它会释放句柄或者延迟处理,所以当你的代码再次运行的时候一切都好。

只有当你给错误的path时才会发生这种情况。 我遇到了同样的问题。

最初我直接运行文件节点xyz.js和所需的静态文件在同一个存储库。 但是,当我做npm开始,代码抛出以上错误:

  fs.js 495 return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode); **Error: ENOENT, no such file or directory** 

然后我移动静态资源,改名path和它的工作。 希望这可以帮助你。