FileSystemWatcher 的用法!
我用textbox1找到要显示的文件,在listBox1中显示其所以的子目录!
private void button1_Click(object sender, EventArgs e)
{
DialogResult dr = folderBrowserDialog1.ShowDialog();
if (DialogResult.Cancel == dr)
return;
textBox1.Text = folderBrowserDialog1.SelectedPath;
FileSystemWatcher watch = new FileSystemWatcher(textBox1.Text);
watch.NotifyFilter = (NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName);
watch.Changed += new FileSystemEventHandler(OnChanged);//我每次运行到这里就直接过了,没有调用OnChanged
watch.EnableRaisingEvents = true;
}
private void OnChanged(object source, FileSystemEventArgs e)
{
WatcherChangeTypes changType = e.ChangeType;
string item = "";
item += DateTime.Now.ToString() + "---";
item += e.FullPath + ":";
item += changType.ToString();
listBox1.Items.Add(item);
}
这是什么原因呢?
------解决方案--------------------
FileSystemWatcher watch;
private void button1_Click(object sender, EventArgs e)
{
DialogResult dr = folderBrowserDialog1.ShowDialog();
if (DialogResult.Cancel == dr)
return;
textBox1.Text = folderBrowserDialog1.SelectedPath;
watch = new FileSystemWatcher(textBox1.Text);
watch.IncludeSubdirectories = true;
watch.NotifyFilter = (NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName);
watch.Changed += new FileSystemEventHandler(OnChanged);//我每次运行到这里就直接过了,没有调用OnChanged
watch.EnableRaisingEvents = true;
}
private void OnChanged(object source, FileSystemEventArgs e)
{
WatcherChangeTypes changType = e.ChangeType;
string item = "";
item += DateTime.Now.ToString() + "---";
item += e.FullPath + ":";
item += changType.ToString();
listBox1.Items.Add(item);
}
------解决方案--------------------//我每次运行到这里就直接过了,没有调用OnChanged
??
OnChanged只有在有文件更新的时候才会触发。
------解决方案--------------------
它并不是立刻执行onchange的事件,而是在watch.EnableRaisingEvents = true; 之后开始监控你的目的文件夹
当有对应的事件发生的时候发执行onchange的代码啊,比如你在那个文件夹里新建一个文件