Node.Js fs模块文件操作(三)_fs.watch 和 fs.watchfile-程序员宅基地

技术标签: node.js  文件系统  fs模块  

三、Node.Js 文件或目录监视

1.fs.watchFile(filename, [options], listener);

对文件进行监视,并且在监视到文件被修改时执行处理

/**
 * filename, 完整路径及文件名;
 * [options], persistent true表示持续监视,不退出程序;interval 单位毫秒,表示每隔多少毫秒监视一次文件
 * listener, 文件发生变化时回调,有两个参数:curr为一个fs.Stat对象,被修改后文件,prev,一个fs.Stat对象,表示修改前对象
 */

var fs = require('fs');
var path = require('path');
var file1 = path.resolve('/test1/one.txt');
//监视文件
//1.当第一次创建监视器的时候,如果文件不存在,监视器毁掉函数会触发一次
fs.watchFile(file1, {
    interval: 20
}, function(curr, prev) {
    if (Date.parse(prev.ctime) == 0) {
        console.log('文件被创建');
    } else if (Date.parse(curr.ctime) == 0) {
        console.log('文件被删除');
    } else if (Date.parse(curr.mtime) != Date.parse(prev.mtime)) {
        console.log('文件有修改');
    }
});
var file2 = path.resolve('/test1/two.txt');
fs.watchFile(file2,  function(curr, prev) {
    console.log('这是第二个watch,监视文件有修改');
});
2.fs.unwatchFile(filename, [listener]);

取消对文件进行监视

/**
 * filename, 完整路径及文件名;
 * [listener], 要取消的监听器事件,如果不指定,则取消所有监听处理事件
 */

var fs=require('fs');
var path=require('path');
var file1=path.resolve('/test1/one.txt');
//监视文件
//当前程序没有结束,一直在监视文件
var listener=function(curr,prev){
	console.log('监视文件发生修改');
};
fs.watchFile(file1,{interval:100},listener);
//取消监视文件
//当前程序程序结束退出
fs.unwatchFile(file1,listener);
3.fs.watch(filename, [options], [listener]);

监视文件或目录

//对文件或目录进行监视,并且在监视到修改时执行处理;
// fs.watch返回一个fs.FSWatcher对象,拥有一个close方法,用于停止watch操作;
// 当fs.watch有文件变化时,会触发fs.FSWatcher对象的change(err, filename)事件,err错误对象,filename发生变化的文件名
/**
 * filename, 完整路径及文件名或目录名;
 * [listener(event, filename], 监听器事件,有两个参数:event 为rename表示指定的文件或目录中有重命名、删除或移动操作或change表示有修改,filename表示发生变化的文件路径
 */

var fs=require('fs');
var path=require('path');
var file1=path.resolve('/test1');
//监视文件
var fsWatcher=fs.watch(file1,function(err,filename){
	//console.log('创建监视器成功,filename:'+filename);
});
//chang 事件会触发多次
fsWatcher.on('change',function(err,filename){
	console.log(filename+'-发生变化');
});
//50秒后 关闭监视
setTimeout(function(){
	fsWatcher.close(function(err){
		if(err)
			console.error(err);
		console.log('关闭成功watch');
	});
},50000);
更多参考: http://www.cnblogs.com/gaojun/p/4159488.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u011127019/article/details/52346510

智能推荐

java经贸大学竞赛项目管理系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署-程序员宅基地

文章浏览阅读75次。java经贸大学竞赛项目管理系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署。springboot基于SpringBoot的婚庆策划系统的设计与实现。ssm基于SSM+VUE技术的小区车辆档案车位管理系统设计与实现。ssh基于java的网上手机销售管理系统的开发与实现mysql。springboot基于springBoot仓库管理系统。springboot青少年辅助教育学习系统设计与实现。JSP客户关系管理系统的设计与实现sqlserver。springboot生物遗传病的治疗和防范系统。

如何优雅的使用和理解线程池_说下你对线程池的理解,如何创建一个线程池与使用-程序员宅基地

文章浏览阅读624次。前言平时接触过多线程开发的童鞋应该都或多或少了解过线程池,之前发布的《阿里巴巴 Java 手册》里也有一条: 可见线程池的重要性。简单来说使用线程池有以下几个目的:线程是稀缺资源,不能频繁的创建。 解耦作用;线程的创建于执行完全分开,方便维护。 应当将其放入一个池子中,可以给其他任务进行复用。线程池原理谈到线程池就会想到池化技术,其中最核心的思想就是把..._说下你对线程池的理解,如何创建一个线程池与使用

将cram/bam文件转换为fastq文件_cram转成bam-程序员宅基地

文章浏览阅读3.1k次,点赞3次,收藏5次。NCBI下载的cram文件无法直接使用,需要先转成bam/sam文件,根据官网说明下载了cramtools,发现早已没有维护,报错如下:$ java -jar cramtools-3.0.jarError: Invalid or corrupt jarfile cramtools-3.0.jar所以就直接用samtools来转换,但是直接转换会报错:$ samtools view -b NA12878.final.cram > NA12878.bam &Failed to popu_cram转成bam

INS/GNSS组合导航(三)松耦合、紧耦合、深度耦合_gnss/ins-程序员宅基地

文章浏览阅读1.4w次,点赞33次,收藏222次。INS/GNSS组合导航,松耦合、紧耦合、深度耦合异同对比_gnss/ins

poj 2676 Sudoku_数独 17997-程序员宅基地

文章浏览阅读288次。SudokuTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 17997 Accepted: 8714 Special JudgeDescriptionSudoku is a very simple task. A square table with_数独 17997

【渝粤教育】电大中专计算机职业素养 (9)作业 题库_a 职业习惯 b 职业道德 c 职业意识 d 职业化-程序员宅基地

文章浏览阅读486次。1.( )就是合适的时间、合适的地点、做合适的事A.职业习惯B.职业意识C.职业化D.职业道德错误正确答案:左边查询学生答案:未作答2.曾经的一项调查发现一些企业业绩不好,客户流失的最重要的原因是( )。A.企业员工素养达不到要求B.企业管理问题C.企业产品价格不好D.企业产品质量问题错误正确答案:左边查询学生答案:未作答3.用冰山模型说明职业素养构成时,我们把浮在水面上面的知识、技能等部分称为( )的职业素养。A.显性B.专业C.获得D.隐性错_a 职业习惯 b 职业道德 c 职业意识 d 职业化

随便推点

数据结构与算法分析Java版练习2.8_数据结构与算法例2-8-程序员宅基地

文章浏览阅读1.2k次。package ch02;import java.util.Arrays;import java.util.Random;/** * 练习2.8 假设需要生成前N个整数的一个随机转换。例如{4,3,1,5,2}和{3,1,4,2,5}就是合法的转换,但 * {5,4,1,2,1}则不是,因为数1出现两次而数3却没有。这个程序常常用于模拟一些算法。我们假设存在一个随机数 * 生成器r_数据结构与算法例2-8

HttpPost_httppost hp = new httppost-程序员宅基地

文章浏览阅读382次。public class MainActivity extends AppCompatActivity { private TextView tvShow; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceSt_httppost hp = new httppost

C++ 之头文件声明定义_c++跨平台头文件声明-程序员宅基地

文章浏览阅读2.5k次,点赞5次,收藏21次。最近在学习 c++, 在编译与链接过程中遇到了一些定义与声明的问题, 经过多处查阅资料, 基本解惑. 现记录与此, 希望让后面人少走些弯路.C++ 的头文件应该用什么扩展名?目前业界的常用格式如下:implementation file*.cpp*.cc*.cc*.cheader file*.hpp*.h++*.hh*.hxx*.h一句话: 建议 源文件使用 .cpp, 头文件使用 .hpp关于 implementation file 并没有什么说的, 使用._c++跨平台头文件声明

Android 集成Tinker踩坑记录_android tinker-程序员宅基地

文章浏览阅读9.4k次。高版本AGP集成Tinker踩坑记录,加固包补丁如何生成,TInker补丁的管理规范。_android tinker

Sum It Up POJ 1564 HDU 杭电1258【DFS】_problem description given a specified total t and -程序员宅基地

文章浏览阅读942次。Problem DescriptionGiven a specified total t and a list of n integers, find all distinct sums using numbers from the list that add up to t. For example, if t=4, n=6, and the list is [4,3,2,2,1,1],_problem description given a specified total t and a list of n integers, find

使用springboot集成mybatis出现错误:CLIENT_PLUGIN_AUTH is required_mybatis client_plugin_auth is required-程序员宅基地

文章浏览阅读227次。问题:java.sql.SQLNonTransientConnectionException: CLIENT_PLUGIN_AUTH is required at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:110) ~[mysql-connector-java-8.0.23.jar:8.0.23] at com.mysql.cj.jdbc.exceptions.SQLError.crea..._mybatis client_plugin_auth is required