2017-05-05 347 views
0

我正在尝试读取文件的内容。该文件存在检查通过,即使再读取该文件节选如下图所示:nodejs:无法读取文件内容

var fs = require('fs') 
fs.exists('c:\\abc.txt',function(exists){ 
    console.log("exists"); 
    fs.readFile('c:\\abc.txt', 'UTF-8', function (err,data) { 
      if (err) { 
       console.log("err"+err); 
      }    
      console.log("data:"+data);     
    }); 
}); 

输出

exists 
errError: ENOENT: no such file or directory, open 'c:\abc.txt' 
data:undefined 

我如何可以更正。

+0

fs.exists已弃用多年,请参阅https://nodejs.org/api/fs.html#fs_fs_exists_path_callback – baao

+0

反斜杠字符会取消后续字符具有的任何“特殊含义”,因此“\\”会被读为只需“\”,您需要编写“\\\\”以获得“\\”。这就是为什么即使你输入了两个也没有文件“c:\ abc.txt”,只有一个反斜杠。 – illiteratecoder

回答

3

您的代码不检查fs.exists的结果是否存在该文件。您只需在回调中读取您的文件即可。你需要检查第一个参数来判断它是真的(文件存在)还是假的(不)。目前,您的代码完全没有使用exists参数。 (还应该退出readFile回调或以其它方式使用data如果err不是null跳过位。)

fs.exists已弃用的年龄,并分别,有一个在检查没有点是否尝试之前文件存在阅读它,因为它可以创建或删除之后存在检查但之前的读取。刚刚尝试读取这个文件,并处理错误,如果你不能:

var fs = require('fs'); 
fs.readFile('c:\\abc.txt', 'UTF-8', function(err, data) { 
    if (err) { 
     console.log("err"+err); 
     return; 
    } 
    console.log("data:"+data);     
}); 

如果你真的想读前检查是否存在,你可以使用fs.existsSync(不推荐),其中至少降低了在检查存在和读取文件之间的窗口,但它仍然没有多大意义。

+0

谢谢@TJ Crowder,虽然“.exists”现在可以使用,但它提到它不再受社区支持,可能会在更高版本中被弃用。 – BabyGroot

+0

@StillNestling:*“......可能会在更高版本中被弃用”*现在已经弃用**,并且已经有多年了。在某个时候它可能会被删除。我一直在关注这个传奇[一段时间](http://stackoverflow.com/questions/4482686/check-synchronously-if-file-directory-exists-in-node-js/4482701#4482701)。我不会建议使用弃用的API,特别是长期弃用的API。 –

+0

@TJ Crowder - 谢谢我已经删除它 – BabyGroot