当前位置: 首页 > news >正文

Go 实现fsnotify

【官方操作】

package mainimport ("log""github.com/fsnotify/fsnotify"
)func main() {watcher, err := fsnotify.NewWatcher()if err != nil {log.Fatal(err)}defer watcher.Close()done := make(chan bool)go func() {for {select {case event, ok := <-watcher.Events:if !ok {return}log.Println("event:", event)if event.Op&fsnotify.Write == fsnotify.Write {log.Println("modified file:", event.Name)}case err, ok := <-watcher.Errors:if !ok {return}log.Println("error:", err)}}}()err = watcher.Add("E:\\test")if err != nil {log.Fatal(err)}<-done
}

        这个只是监控最顶层的目录,如果是子目录的话,就监控不到,所以需要遍历下子目录,依次加入到监控器中

func watchDir(watcher *fsnotify.Watcher,dir string)  {// 遍历子目录filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {// 判断是否为目录,只需要监听目录,目录下的文件变化就可以进行相应操作if info.IsDir(){path, err := filepath.Abs(path)if err != nil {log.Println(err)return err}// 然后将其加入监听if err := watcher.Add(path);err!=nil{log.Printf("watch %s failed. err = %s",path,err.Error())return err}}return nil})
}
watchDir(watcher,"E:\\test")

途中需要新增监控目录的话,需要判断下是否是目录,是的话,直接用Add进入即可

//   如果是目录,则加入监控
fi, err := os.Stat(event.Name)
if err == nil && fi.IsDir() {watcher.Add(event.Name)fmt.Printf("===新增监控:【%s】\n", event.Name)
}
fsnotify有几种监控类型,分别当有哪些行为的时候,会触发
  1. Create:当在监控的目录下创建新的文件或目录时,会触发此事件。例如,使用touch命令创建新文件,或者使用mkdir命令创建新目录。

  2. Write:当监控的文件被写入数据时,会触发此事件。例如,使用echo或,重定向操作向文件写入数据。

  3. Remove:当监控的文件或目录被删除时,会触发此事件。例如,使用rm命令删除文件或目录。

  4. Rename:当监控的文件或目录被重命名或者被移动到其他位置时,会触发此事件。例如,使用mv命令重命名文件或目录。

  5. Chmod:当监控的文件或目录的权限被改变时,会触发此事件。例如,使用chmod命令改变文件或目录的权限。

操作两大类型 :文件 + 目录

文件:新增、修改、删除、重命名、修改权限

  • 新增:Create + Chmod

  • 修改:Create + Write + Rename

  • 重命名:Rename + Create

  • 删除:remove

目录:新增、删除、重命名、修改权限

  • 重命名(难点): rename + create

    • 先rename,在create新目录,最后rename

  • 新增:create

  • 删除: remove

  • 修改权限:

相关文章:

Go 实现fsnotify

【官方操作】 package mainimport ("log""github.com/fsnotify/fsnotify" )func main() {watcher, err : fsnotify.NewWatcher()if err ! nil {log.Fatal(err)}defer watcher.Close()done : make(chan bool)go func() {for {select {case event, ok : <…...

Flink GateWay、HiveServer2 和 hive on spark

Flink SQL Gateway简介 从官网的资料可以知道Flink SQL Gateway是一个服务&#xff0c;这个服务支持多个客户端并发的从远程提交任务。Flink SQL Gateway使任务的提交、元数据的查询、在线数据分析变得更简单。 Flink SQL Gateway的架构如下图&#xff0c;它由插件化的Endpoi…...

阿里云国际设置黑白名单(针对高防实例IP)

DDoS高防支持针对高防实例设置黑名单和白名单&#xff0c;以拦截或放行指定IP的访问请求&#xff0c;配置后对该实例所有的业务生效。本文九河云介绍如何配置黑白名单。 功能介绍 黑名单IP的访问流量将被DDoS高防实例直接丢弃。白名单IP的访问流量将被DDoS高防实例直接放行。…...

Docker 入门使用说明

Docker 入门使用说明 Docker 安装 Docker 官网&#xff1a;Docker Docker 安装说明&#xff1a;Docker 安装说明 这里由于 Docker 在实时更新&#xff0c;所以每次安装 Docker 用来导入 key 的链接可能会有变化&#xff0c;这里就参考官方的安装方法即可 Docker 常用命令说…...

UE5 LiveLink 自动连接数据源,以及打包后不能收到udp消息的解决办法

为什么要自动连接数据源&#xff0c;因为方便打包后接收数据&#xff0c;这里我是写在了Game Instance,也可以写在其他地方&#xff0c;自行替换成Beginplay和Endplay 关于编辑器模式下能收到udp消息&#xff0c;打包后不能收到消息的问题有两点需要排查&#xff0c;启动打包后…...

国内ip切换是否合规?

在网络使用中&#xff0c;IP地址切换是一种常见的行为&#xff0c;可以用于实现隐私保护、访问地域限制内容等目的。然而&#xff0c;对于国内用户来说&#xff0c;IP地址切换是否合规一直是一个备受关注的话题。在中国&#xff0c;网络管理严格&#xff0c;一些IP切换行为可能…...

Flutter 3.13 之后如何监听 App 生命周期事件

在 Flutter 中&#xff0c;您可以监听多个生命周期事件来处理应用程序的不同状态&#xff0c;但今天我们将讨论 didChangeAppLifecycleState 事件。每当应用程序的生命周期状态发生变化时&#xff0c;就会触发此事件。可能的状态有 resumed 、 inactive 、 paused 、 detached …...

基于docker创建深度学习开发环境

基于docker创建深度学习开发环境 记录几个链接 第一步&#xff1a;配置docker环境&#xff0c;此处大把教程&#xff0c;不再赘述第二步&#xff1a;拉取nvidia做好的cuda和cudnn镜像&#xff1a; docker pull nvcr.io/nvidia/cuda:12.2.0-devel-ubuntu20.04如果有其他需求&a…...

Linux系统——硬件命令

目录 一.网卡带宽 1.查看网卡速率——ethtool 网卡名 2.查看mac地址——ethtool -P 网卡名 二、内存相关 1.显示系统中内存使用情况——free -h 2.显示内存模块的详细信息——dmidecode -t memory 三、CPU相关 1.查看CPU架构信息——lscpu 2.性能模式 四、其他硬件命…...

R语言Meta分析核心技术:回归诊断与模型验证

R语言作为一种强大的统计分析和绘图语言&#xff0c;在科研领域发挥着日益重要的作用。其中&#xff0c;Meta分析作为一种整合多个独立研究结果的统计方法&#xff0c;在R语言中得到了广泛的应用。通过R语言进行Meta分析&#xff0c;研究者能够更为准确、全面地评估某一研究问题…...

动态规划Dynamic Programming

上篇文章我们简单入门了动态规划&#xff08;一般都是简单的上楼梯&#xff0c;分析数据等问题&#xff09;点我跳转&#xff0c;今天给大家带来的是路径问题&#xff0c;相对于上一篇在一维中摸爬滚打&#xff0c;这次就要上升到二维解决问题&#xff0c;但都用的是动态规划思…...

详解机器学习概念、算法

目录 前言 一、常见的机器学习算法 二、监督学习和非监督学习 三、常见的机器学习概念解释 四、深度学习与机器学习的区别 基于Python 和 TensorFlow 深度学习框架实现简单的多层感知机&#xff08;MLP&#xff09;神经网络的示例代码&#xff1a; 欢迎三连哦&#xff01; 前言…...

语音转文字——sherpa ncnn语音识别离线部署C++实现

简介 Sherpa是一个中文语音识别的项目&#xff0c;使用了PyTorch 进行语音识别模型的训练&#xff0c;然后训练好的模型导出成 torchscript 格式&#xff0c;以便在 C 环境中进行推理。尽管 PyTorch 在 CPU 和 GPU 上有良好的支持&#xff0c;但它可能对资源的要求较高&#x…...

第1篇:Mysql数据库表结构导出字段到Excel(一个sheet中)

package com.xx.util;import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.sql.*; import java.io.*;public class DatabaseToExcel {public static void main(String[] args) throws Exception {// 数据库连接配置String u…...

Request请求参数----中文乱码问题

一: GET POST获取请求参数: 在处理为什么会出现中文乱码的情况之前, 首先我们要直到GET 以及 POST两种获取请求参数的不同 1>POST POST获取请求参数是通过输入流getReader来进行获取的, 通过字符输入流来获取响应的请求参数, 并且在解码的时候, 默认的情况是 ISO_885…...

labelImg安装方法

labelImg安装方法(简单方法) - 知乎 (zhihu.com) 1. lableImg下载 git clone https://github.com/tzutalin/labelImg.git 2. 制作lableImg所需的"condapython"环境(conda需要先安装,最好再设置下下载源) 打开Anaconda Prompt对话框 # 创建环境 conda create -n …...

吴恩达2022机器学习专项课程(一) 3.6 可视化样例

问题预览 1.本节课主要讲的是什么&#xff1f; 2.不同的w和b&#xff0c;如何影响线性回归和等高线图&#xff1f; 3.一般用哪种方式&#xff0c;可以找到最佳的w和b&#xff1f; 解读 1.课程内容 设置不同的w和b&#xff0c;观察模型拟合数据&#xff0c;成本函数J的等高线…...

C#入门及进阶教程|Windows窗体属性及方法

1.Windows窗体 窗体本身是一个对象&#xff0c;对应于System.Windows.Forms名称空间的Form类。它有自己的属性、方法和事件&#xff0c;用于控制窗体的外观和行为。窗体又是各种控件的容器&#xff0c;用于容纳各种窗体控件。如果想生成窗体&#xff0c;必须从Form类派生出自己…...

34-Java传输对象模式 ( Transfer Object Pattern )

Java传输对象模式 实现范例 传输对象模式&#xff08;Transfer Object Pattern&#xff09;用于从客户端向服务器一次性传递带有多个属性的数据传输对象也被称为数值对象&#xff0c;没有任何行为传输对象是一个具有 getter/setter 方法的简单的 POJO 类&#xff0c;它是可序列…...

flutter实现视频播放器,可根据指定视频地址播放、设置声音,进度条拖动,下载等

需要装依赖&#xff1a; gallery_saver: ^2.3.2video_player: ^2.8.3 AndroidManifest.xml <uses-permission android:name"android.permission.INTERNET"/> 实现代码 import dart:async; import dart:io;import package:flutter/material.dart; import pa…...

CVPR 2023反无人机数据集实战:用ModelScope上的开源模型快速上手目标检测

CVPR 2023反无人机数据集实战&#xff1a;用ModelScope上的开源模型快速上手目标检测无人机技术的普及带来了新的安全挑战&#xff0c;从隐私侵犯到关键设施威胁&#xff0c;反无人机技术正成为计算机视觉领域的热点。CVPR 2023反无人机竞赛提供的开源数据集和基线模型&#xf…...

自制射频功率计:基于AD8317芯片,成本43欧元实现1MHz-10GHz测量

1. 项目概述&#xff1a;为什么我要亲手打造一台射频功率计在无人机和模型飞行器的圈子里&#xff0c;尤其是在我们荷兰FMS Spaarnwoude俱乐部&#xff0c;合规飞行是头等大事。我给我的八轴飞行器加装了云台相机和图传系统&#xff0c;工作在5.8GHz频段。根据本地法规&#xf…...

告别C盘战士!ArcGIS 10.6安装路径选择与磁盘空间优化全攻略

告别C盘战士&#xff01;ArcGIS 10.6安装路径选择与磁盘空间优化全攻略当GIS初学者第一次安装ArcGIS 10.6时&#xff0c;往往会被其庞大的安装体积所震惊。许多用户习惯性地点击"下一步"&#xff0c;结果发现C盘空间被迅速吞噬&#xff0c;系统运行变得迟缓。本文将深…...

2026年,本地精准营销高性价比服务商来袭,你还不了解一下?

在本地商业竞争日益激烈的2026年&#xff0c;实体店面临着诸多挑战&#xff0c;引流难、成本高、复购率低等问题困扰着众多商家。而中粤&#xff08;广州&#xff09;信息科技有限公司作为本地精准营销的高性价比服务商&#xff0c;正以其独特的优势和卓越的服务&#xff0c;为…...

别只拿PotPlayer看片了!挖掘它的采集录制功能,做Switch游戏存档大师

别把PotPlayer当普通播放器&#xff01;解锁它的Switch游戏录制黑科技 你是否已经厌倦了在OBS、Bandicam等专业录制软件中反复调试参数的繁琐&#xff1f;是否想过那个每天用来看视频的PotPlayer&#xff0c;其实隐藏着令人惊喜的游戏录制能力&#xff1f;今天&#xff0c;我们…...

放弃编码器!纯靠MPU6050和PID算法,手把手教你用TT马达实现平衡小车稳定控制(STM32F103C8T6实战)

纯MPU6050STM32F103的TT马达平衡车实战&#xff1a;无编码器PID控制全解析当大多数平衡小车方案都在强调编码器对速度反馈的不可或缺性时&#xff0c;我们决定挑战一个更极简的配置&#xff1a;仅用5美元的TT马达、9轴的MPU6050和STM32F103C8T6最小系统板&#xff0c;完全舍弃编…...

XML 服务器

XML 服务器 引言 XML(可扩展标记语言)服务器在现代互联网技术中扮演着至关重要的角色。它为数据的传输和处理提供了灵活且高效的方式。本文将深入探讨XML服务器的概念、工作原理、应用场景及其在软件开发中的重要性。 什么是XML服务器? XML服务器是一种用于存储、处理和…...

Web渗透测试能力成长地图:从工具使用到漏洞认知跃迁

1. 这不是工具清单&#xff0c;而是一张Web渗透测试的“能力成长地图”你刚点开这篇文章&#xff0c;大概率正站在两个路口之间&#xff1a;一边是网上铺天盖地的“十大免费扫描器推荐”&#xff0c;点进去全是截图下载链接一句“一键扫漏洞”&#xff0c;结果装完跑两下&#…...

WTF Auto Layout? 实战:10个常见约束冲突案例解析与解决方案

WTF Auto Layout? 实战&#xff1a;10个常见约束冲突案例解析与解决方案 【免费下载链接】wtfautolayout The source code for Why The Failure, Auto Layout? 项目地址: https://gitcode.com/gh_mirrors/wt/wtfautolayout 在iOS开发中&#xff0c;Auto Layout是构建灵…...

实战对比:用直方图均衡化与CLAHE拯救你的背光/过曝照片(附Python完整代码)

拯救逆光废片&#xff1a;直方图均衡化与CLAHE的实战效果对比每次旅行回来整理照片时&#xff0c;总会有几张因为光线问题几乎要删除的废片——要么是逆光下的人脸黑得看不清五官&#xff0c;要么是天空过曝失去所有云层细节。这些照片往往记录着重要时刻&#xff0c;直接删除实…...