if(err){
console.log("err when fstate!");
return false;
}
console.log(state);
//state是一个对象,其中包含着当前打开文件的一些基本信息
});
});
保持上面的代码,然后在控制台执行的结果如下:
{
dev: 16777220,
mode: 33279,
nlink: 1,
uid: 501,
gid: 20,
rdev: 0,
blksize: 4096,
ino: 1456286,
size: 86418,
blocks: 176,
atime: Sat Aug 15 2015 15:46:59 GMT+0800 (CST),
mtime: Sat Aug 15 2015 15:01:55 GMT+0800 (CST),
ctime: Sat Aug 15 2015 15:01:55 GMT+0800 (CST),
birthtime: Mon Aug 03 2015 22:47:02 GMT+0800 (CST)
}
当我们使用console.log在控制台打印信息时,只能显示一些本身的属性,其实state还支持一些方法,比如:isDirectory,isFile,isBlockDevice等方法,这里因为我平时也不会太用到nodejs做东西,所以对其中的很多属性,都用不到,使用不到,所以也就导致,我对于这个属性或者方法的含义,不能很好的理解,所以这里就不多说了。
至于关于state的东西,可以在fs.js中,查看查找fs.State构造函数,既可以找到所有包含的信息。
测试用例
var fs = require("fs"); fs.readFile('test.js',"utf-8",function(err,data){
if(err){
console.log("readFile file error");
return false;
}
console.log(data);
});
上面给出的是最简单的示例了,因为我读取的文件中,保持的内容只是一段中文文本,所以这里使用的是utf-8的编码格式,如果这里不传入编码格式,那么返回的data值则是一个Buffer对象。
readFile源码分析
虽然这里叫做源码分析,实质上,只是来一起看下,readFile在源码中是如何实现的。该部分只有源码,请查看源码中对应的注释,了解源码的整改结构。
fs.readFile = function(path, options, callback_) {
var callback = maybeCallback(arguments[arguments.length - 1]);
//msybeCallback用来判断是否为一个function,这里时判断传入的第二个参数是否为function
//如果不是,那么就定义一个,这里对于后面的逻辑影响不大 //给options设置一些默认值,readFile的第二个参数,只能是三种情况
//1:function,这个时候,options使用默认值,第二个参数为回调函数
//2:string类型,这个时候,第二个参数为encoding的属性值
//3:object类型,这个时候,表示options为一个完整的对象,可能包含也可能不包含encoding和flag属性
//如果不为上述的三种类型,那么直接抛出一个类型异常,停止执行
if (util.isFunction(options) || !options) {
options = { encoding: null, flag: 'r' };









