Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 现有文件上的NodeJS fs.open失败(不是路径问题)_Javascript_Node.js_File Io_Fs - Fatal编程技术网

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

Javascript 现有文件上的NodeJS fs.open失败(不是路径问题),javascript,node.js,file-io,fs,Javascript,Node.js,File Io,Fs,我已经处理这个问题很长时间了,所以非常感谢您的帮助。因此,我正在下载一个文件,并使用PhantomJS和CasperJS保存它。让我指出,它们不是问题所在。文件下载时没有问题 问题是NodeJS在下载文件后无法识别或打开该文件。我无法使用fs.stat、fs.open等。。什么都不管用 稍后我将共享代码,但下面是日志: Here: bdTcK6hSdownload.csv [ '2puzZMeLdownload.csv', '2s5ICbKNdownload.csv', 'bdTcK6

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

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

我猜这是当前工作目录中的一个差异。您是否从同一目录启动casperJS和node.js进程?它们中的任何一个是否在运行时更改工作目录?尝试类似的方法,其中节点的
\uu dirname
将为您提供当前执行的
.js
文件的目录路径

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

另一种可能性是时机

我曾经遇到过这样的情况:一个文件条目直接出现在文件夹中,但文件无法使用,因为写入它的事情要么尚未完成,要么尚未释放它的句柄。在这种情况下,需要延迟处理或进行其他检查以确定事情是否准备就绪是很正常的


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

只有在给出错误路径时才会发生这种情况。我遇到了同样的问题

最初,我直接运行文件节点xyz.js,所需的静态文件位于同一存储库中。但当我执行npm启动时,代码抛出了上述错误:

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

然后我移动了静态资源,重命名了路径,它就工作了。希望这对您有所帮助。

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

命令:

dir


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

Hmm。您检查过权限了吗?另外,像这样运行node.js:strace./node-这将跟踪所有系统调用,您正在查找open(),检查节点正在使用的路径,等等。这将告诉您节点进程实际在做什么。@EdH。要获得权限,请单击“是”。所有文件都具有相同的权限:
-rw-r--r--1 Home staff 216102 Feb 3 15:00 bdTcK6hSdownload.csv
还值得注意的是,如果我重新启动节点,我可以毫无问题地访问该文件。@EdH.Hmm,由于某些原因,我无法在strace模式下运行:mac:dev Home$strace-fF-o strace.log node app.js-bash:strace:command未找到-不确定该命令有何错误您正在运行最新版本的node吗?您检查过问题队列了吗?Enoint有一系列的Windows问题,尽管大多数问题现在已经关闭@loganfsmyth是的,我在OSX Lion上运行节点0.6.7。我应该在问题中加上这一点。我很感谢你周到的回答和示例,但是你可以从我发布的代码中看到,他们返回的是同一个目录。caspertemp位于根目录中,但工作目录位于节点_模块中。例如,如果我使用您的代码并删除_dirname变量,我得到的是:/Users/Home/dev/caspertemp/pwAA3Kzzdownload.csv enoint,没有这样的文件或目录“/Users/Home/dev/caspertemp/pwAA3Kzzdownload.csv”
ls