Node.js + MongoDB + AngularJS - 6 访问文件系统-2

5. 其他文件系统任务

5.1 验证路径的存在性

fs.exists(path, callback)
fs.existsSync(path)

fs.existsSync(path) 返回true或false,这取决于路径是否存在。fs.exists()需要实现一个调用完成时将要执行的回调函数。根据路径是否存在,此回调函数将被传入true或false。

fs.exists('filesystem.js', function(exists) {
    console.log(exists ? 'Path  Exists' : 'Path Does Not Exists') ;
}) ;

5.2 获取文件信息

fs.stat(path, callback)
fs.statSync(path)

fs.statsSync()方法返回一个Stats对象。执行fs.stats()方法,而Stats对象作为第二个参数传递到回掉函数。第一个参数是error,如果发生错误的话。

属性/方法 说明
isFile() 如果该条目是一个文件,则返回true
isDirectory() 如果该条目是一个目录,则返回true
isSocket() 如果该条目是一个套接字,则返回true
dev 指定文件所在设备的ID
mode 指定文件的访问模式
size 指定文件的字节数
blksize 指定用于存储该文件的块大小,以字节为单位
blocks 指定文件在磁盘上占用的块的数目
atime 指定上次访问文件的时间
mtime 指定文件的最后修改时间
ctime 指定文件的创建时间
var fs = require('fs') ;

fs.stat('file_stats.js', function (err, stats) {
    if (!err) {
        console.log('stats: ' + JSON.stringify(stats, null, '')) ;
        console.log(stats.isFile() ? 'Is a File' : 'Is not a File') ;
        console.log(stats.isDirectory() ? 'Is a Folder' : 'Is not a Folder') ;
        console.log(stats.isSocket() ? 'Is a Socket' : 'Is not a Socket') ;
        stats.isDirectory() ;
        stats.isBlockDevice() ;
        stats.isCharacterDevice() ;
        stats.isFIFO() ;
        stats.isSocket() ;
    }
}) ;

5.3 列出文件

fs.readdir(path, callback)
fs.readdirSync(path)
var fs = require('fs') ;
var Path = require('path') ;

function WalkDirs(dirPath) {
    console.log(dirPath) ;
    fs.readdir(dirPath, function (err, entries) {
        for (var idx in entries) {
            var fullPath = Path.join(dirPath, entries[idx]) ;
            (
                function (fullPath) {
                    fs.stat(fullPath, function (err, stats) {
                        if (stats && stats.isFile()) {
                            console.log(fullPath) ;
                        } else if (stats && stats.isDirectory()) {
                            WalkDirs(fullPath) ;
                        }
                    }) ;
                }
            )(fullPath) ;
        }
    }) ;
}

WalkDirs('../book') ;

5.4 删除文件

fs.unlink(path, callback)
fs.unlinkSync(path)

fs.unlink('new.txt', function(err){
    console.log(err ? 'File Delete Failed' : 'File Deleted') ;
}) ;

5.5 截断文件

截断(Truncate)文件是指通过把文件结束处设置为比当前小的值来减小文件的大小。

fs.truncate(path, len, callback)
fs.truncateSync(path, len)

下面代码段说明了把名为log.txt的文件截断成零字节的过程:

fs.truncate('log.txt', function(err){
    console.log(err ? 'File Truncate Failed' : 'File Truncated') ;
}) ;

5.6 建立和删除目录

fs.mkdir(path, [mode], callback)
fs.mkdirSync(path, [mode])

使用异步方法的时候,需要等待创建目录的回调函数完成后,才能创建该目录的子目录。

fs.mkdir('./data', function(err) {
    fs.mkdir('./data/folderA', function(err) {
        fs.mkdir('./data/folderA/folderB', function(err) {
        }) ;    
    }) ;
}) ;
fs.rmdir(path, callback)
fs.rmdirSync(path)

使用异步方法的时候,在删除父目录之前,需要等待删除该目录的回调函数完成。

fs.rmdir('./data/folderA/folderB', function(err) {
    fs.rmdir('./data/folderA', function(err) {
        fs.rmdir('./data', function(err) {
        }) ;    
    }) ;
}) ;

5.7 重命名文件和目录

fs.rename(oldPath, newPath, callback)
fs.renameSync(oldPath, newPath)

fs.rename('old.txt', 'new.txt', function(err) {
    console.log(err ? 'rename failed' : 'file renamed') ;
}) ;

5.8 监视文件更改入

虽然它并不完全稳定,但fs模块提供了监视文件,并在文件发生变化时执行回调函数的有用工具。监视确实在底层操作系统中产生一些开销,所以应该适可而止使用它们。

fs.watchFile(path, [options], callback)

你也可以传入options,这是一个对象,它包含persistent(持续)和interval属性。如果你想只要文件被监视,就继续运行这个程序,则把persistent属性设为true。interval属性指定你所需文件更改的轮询时间,以毫秒为单位。
当文件发生变化时,callback函数就会被执行,并传递当前和以前的stats对象。

fs.watchFile('log.txt', {persistent: true, interval: 5000}, function(curr, prev) {
    console.log('log.txt modified at: ' + curr.mtime) ;
    console.log('Previous modification was: ' + prev.mtime) ;
}) ;
原创文章 27 获赞 18 访问量 3万+

猜你喜欢

转载自blog.csdn.net/b635781894/article/details/51303059