14

我已经处理这个问题很长时间了,所以非常感谢任何帮助。所以,我正在下载一个文件并使用 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);

在此之前和之后还有很多事情要做,但这些都不重要,因为这个基本功能失败了。请帮忙!这已经唠叨了好几个星期了。

4

4 回答 4

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);
于 2012-02-04T08:14:12.607 回答
0

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

命令:

dir

或者

ls

在那里获取实际的文件名并使用它。在我的例子中,我将一个文本文档保存为“readMe.txt”,在命令提示符下它显示为“readMe.txt.txt”。保存时我不必附加文件扩展名,这造成了问题。

于 2018-01-11T23:06:41.517 回答
0

仅当您提供错误的路径时才会发生这种情况。我遇到了同样的问题。

最初我直接运行文件节点 xyz.js 并且所需的静态文件在同一个存储库中。但是当我执行 npm start 时,代码抛出了错误:

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

然后我移动了静态资源,重命名了路径并且它起作用了。希望这可以帮助你。

于 2016-12-05T15:32:05.040 回答
0

另一种可能性是时机。

过去我曾经遇到过文件条目立即出现在文件夹中但文件无法使用的情况,因为写入它的东西尚未完成或尚未释放它的句柄。在这些情况下,需要推迟处理或进行一些其他检查以查看事情是否准备就绪并不罕见。

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

于 2015-12-13T16:37:33.613 回答