【发布时间】:2014-04-10 07:54:45
【问题描述】:
我正在尝试跟踪文件系统上的更改。因此我使用 FileSystemWatcher。不幸的是,Renamed 事件不提供 Windows 7 和 Windows 8 上的 oldName 信息。在 Windows XP 上它可以完美运行。
这是我的程序:
using System;
using System.IO;
namespace Watcher2
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Enter Folder Name:");
string folder = Console.ReadLine();
Console.WriteLine("Watching folder "+folder);
FileSystemWatcher watcher = new FileSystemWatcher(folder, "*.*");
watcher.EnableRaisingEvents = true;
watcher.IncludeSubdirectories = true;
watcher.Renamed += watcher_Renamed;
Console.ReadLine();
}
static void watcher_Renamed(object sender, RenamedEventArgs e)
{
Console.WriteLine(string.Format("OldName is {0} \nName is {1}\nOldFullPath is {2}\nFullPath is {3}", (e.OldName ?? "NULL"), e.Name, e.OldFullPath, e.FullPath));
}
}
RenamedEventArgs 不提供 OldName(例如,OldName 为 NULL)。无法使用 Windows XP :)
我错过了什么吗?
【问题讨论】:
-
该代码示例在我的装有 Windows 8.1 和 Visual Studio 2013 的机器上运行良好。我尝试为 .NET 框架 2.0、4.0 和 4.5 进行编译。您使用的是哪个版本(VS、.NET)?
-
相同,在 windows 7、vs2013、.net 4.5 上运行良好
-
什么在执行重命名?是您自己使用 Windows 资源管理器还是命令行?还是其他用户和/或程序?
-
我为 .Net 2.0(带有 VS 2012)编译它以在我的 Windows XP 机器上测试它,但它也不适用于 .Net 4.5 和 Windows 8。我使用 Windows 资源管理器重命名文件。
-
您的输出显示的是 oldName?