×

filewatcher file he

file watcher什么意思?哪本介绍SHELL编程的书 比较好

admin admin 发表于2022-05-24 03:42:05 浏览148 评论0

抢沙发发表评论

file watcher什么意思


FileWatcher能实现对某一目录的文件(新建,改名,内容修改,删除)的实时监视

using System;
using System.IO;
using System.Windows.Forms;

namespace Fw
{
    public partial class frm1 : Form
    {
        private FileSystemWatcher watcher;
        private delegate void UpdateWatchTextDelegate(string newText);


        public frm1()
        {
            InitializeComponent();
            this.watcher = new FileSystemWatcher();
            this.watcher.Deleted += new FileSystemEventHandler(watcher_Deleted);
            this.watcher.Renamed += new RenamedEventHandler(watcher_Renamed);
            this.watcher.Changed += new FileSystemEventHandler(watcher_Changed);
            this.watcher.Created += new FileSystemEventHandler(watcher_Created);

        }

        public void UpdateWatchText(string newText)
        {
            lblWatch.Text = newText;
        }


        public void WriteLog(string LogContent) 
        {
            using (StreamWriter sw = new StreamWriter(“c:\\Log.txt“, true))
            {
                sw.WriteLine(LogContent);
                sw.Close();
            } 
            
        }

        void watcher_Created(object sender, FileSystemEventArgs e)
        {           
            try
            {
                WriteLog(String.Format(“File: {0} Created“, e.FullPath));
                this.BeginInvoke(new UpdateWatchTextDelegate(UpdateWatchText), “文件“ + e.FullPath + “被创建“);
            }
            catch (IOException)
            {
                this.BeginInvoke(new UpdateWatchTextDelegate(UpdateWatchText), “创建日志写入失败!“);
            }
        }


        void watcher_Changed(object sender, FileSystemEventArgs e)
        {            
            try
            {              
                WriteLog(String.Format(“File: {0} {1}“, e.FullPath, e.ChangeType.ToString()));
                this.BeginInvoke(new UpdateWatchTextDelegate(UpdateWatchText), “文件“ + e.FullPath + “被修改“);
            }
            catch (IOException)
            {
                this.BeginInvoke(new UpdateWatchTextDelegate(UpdateWatchText), “修改日志写入失败!“);
            }
        }

        void watcher_Renamed(object sender, RenamedEventArgs e)
        {            
            try
            {               
                WriteLog(String.Format(“File renamed from {0} to {1}“, e.OldName, e.FullPath));
                this.BeginInvoke(new UpdateWatchTextDelegate(UpdateWatchText), “文件“ + e.OldName + “被重命名为“ + e.FullPath);
            }
            catch (IOException)
            {
                this.BeginInvoke(new UpdateWatchTextDelegate(UpdateWatchText), “重命名日志写入失败!“);
            }
        }

        void watcher_Deleted(object sender, FileSystemEventArgs e)
        {            
            try
            {                
                WriteLog(String.Format(“File: {0} Deleted“, e.FullPath));
                this.BeginInvoke(new UpdateWatchTextDelegate(UpdateWatchText), “文件“ + e.FullPath + “被删除“);
            }
            catch (IOException)
            {
                this.BeginInvoke(new UpdateWatchTextDelegate(UpdateWatchText), “删除日志写入失败!“);
            }
        }


        private void cmdBrowse_Click(object sender, EventArgs e)
        {
            if (this.folderBrowserDialog1.ShowDialog() != DialogResult.Cancel)
            {
                txtLocation.Text = this.folderBrowserDialog1.SelectedPath;
                cmdWatch.Enabled = true;
            }
        }

        private void cmdWatch_Click(object sender, EventArgs e)
        {
            if (txtLocation.Text.Length 《= 0) 
            {
                MessageBox.Show(“请先选择要监视的文件夹!“);
                cmdBrowse.Focus();
                return;
            }
            watcher.Path = txtLocation.Text;//监控路径(文件夹)
            watcher.Filter = “*.*“;//如果filter为文件名称则表示监控该文件,如果为*.txt则表示要监控指定目录当中的所有.txt文件
            watcher.NotifyFilter = NotifyFilters.LastWrite |
                NotifyFilters.FileName |
                NotifyFilters.Size;
            lblWatch.Text = watcher.Path + “ 监视中“;

            //begin watching.
            watcher.EnableRaisingEvents = true;
        }

        private void btnStop_Click(object sender, EventArgs e)
        {
            watcher.EnableRaisingEvents = false;
            lblWatch.Text = watcher.Path + “ 监视已经停止!“;
        }




    }
}

注:如果目录下还有子目录,FileWatcher默认情况下并不能监视到子目录下的文件,可以通过设置watcher.IncludeSubdirectories = true; 解决这个问题


哪本介绍SHELL编程的书 比较好


《Shell脚本学习指南》
《Linux系统命令及Shell脚本实践指南 (Linux/Unix技术丛书)》
《Linux Shell编程从初学到精通(第2版)(附DVD光盘)》

Linux里面基本的shell脚本编写有哪些


shell脚本就是一些命令的集合。
举个例子,我想实现这样的操作:
1)进入到/tmp/目录;
2)列出当前目录中所有的文件名;
3)把所有当前的文件拷贝到/root/目录下;
4)删除当前目录下所有的文件。
简单的4步在shell窗口中需要你敲4次命令,按4次回车。这样是不是很麻烦?当然这4步操作非常简单,如果是更加复杂的命令设置需要几十次操作呢?那样的话一次一次敲键盘会很麻烦。所以不妨把所有的操作都记录到一个文档中,然后去调用文档中的命令,这样一步操作就可以完成。其实这个文档呢就是shell脚本了,只是这个shell脚本有它特殊的格式。《linux 就该这么学》
Shell脚本通常都是以.sh 为后缀名的,这个并不是说不带.sh这个脚本就不能执行,只是大家的一个习惯而已。所以,以后你发现了.sh为后缀的文件那么它一定会是一个shell脚本了。test.sh中第一行一定是 “#! /bin/bash” 它代表的意思是,该文件使用的是bash语法。如果不设置该行,那么你的shell脚本就不能被执行。’#’表示注释,在前面讲过的。后面跟一些该脚本的相关注释内容以及作者和创建日期或者版本等等。当然这些注释并非必须的,如果你懒的很,可以省略掉,但是笔者不建议省略。因为随着你工作时间的增加,你写的shell脚本也会越来越多,如果有一天你回头查看你写的某个脚本时,很有可能忘记该脚本是用来干什么的以及什么时候写的。所以写上注释是有必要的。另外系统管理员并非你一个,如果是其他管理员查看你的脚本,他看不懂岂不是很郁闷。该脚本再往下面则为要运行的命令了。
-file