我长期以来一直在处理这个问题,所以非常感谢任何帮助。所以,我正在下载一个文件并使用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);
在此之前和之后还有更多的事情发生,但由于这个基本功能失败,所以没有任何重要事项。请帮忙!这已经唠叨了几个星期。
答案 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”。保存时我没有附加文件扩展名,这就产生了问题。