我正在尝试使用以下代码阅读文件内容:
var content = fs.readFileSync(filename);
当存在具有此类文件名的文件时,它可以正常工作。但是,如果文件不存在,它不会做任何事情。它永远挂在那里。
一个解决方案可能是在我尝试读取之前检查文件是否存在,但是我希望这将是fs
模块的一部分,因此它将返回undefined或任何我可以方便处理的错误。
这几乎是我的整个代码,你能看到任何问题吗?我不能。
for (var i=0; i<configFiles.length;i++){
waterfallMain(configFiles[i]);
}
//var importDefinition = config.importDefinition;
function waterfallMain(configFile){
async.waterfall([
function(callback){
sftpHandler.downloadFile(credentials.host, credentials.username, credentials.password, credentials.path+configFile.importFileName, callback);
console.log("Downloading done. Changing file encoding and reading data.");
readFileSync_encoding(configFile.importFileName, "ISO-8859-1", callback);
},
function(fileData, callback) {
mainProcess(fileData, callback);
},
function(data, callback) {
postImportDefinition(data, callback);
},
function(data, uri, callback) {
postData(data, uri, callback);
},
function(syncUri, callback) {
getSyncResponseInIntervals(syncUri, callback);
}],
// the bonus final callback function
function(err, status) {
if (err) {
console.log(err);
}
console.log(status);
return;
});
}
function readFileSync_encoding(filename, encoding, callback) {
var content = fs.readFileSync(filename);
callback(null, iconvlite.decode(content, encoding));
return;
}
修改
问题实际上是在IDE中我一直在使用c9.io
当我在本地运行时,我收到了错误消息。 有趣的发现。
答案 0 :(得分:0)
你可以先尝试检查它的存在:
#!/bin/bash
if [ "$1" == "" ]; then
echo "USAGE: $0 [filename]"
exit;
fi
# rm xx* *.conf'; # uncomment to re-un
csplit "$1" '/^\s*server\s*{*$/' {*}
for i in xx*; do
new=$(grep -oPm1 '(?<=server_name).+(?=;)' $i|sed -e 's/\(\w\) /\1_/g'|xargs);
if [[ -e $new.conf ]] ; then
cat "$i">>$new.conf
rm "$i"
else
mv "$i" $new.conf
fi
done
更新:提供有关异步方法的帮助:
var fs = require('fs');
var content = '';
if(fs.accessSync(filename, fs.R_OK)) {
content = fs.readFileSync(filename);
}
console.log(content);
有关详细信息,请参阅fs.accessSync文档。
答案 1 :(得分:-1)
编写一个返回字符串或null
的函数self