VSPackage 中的文件观察器
File Watcher in VSPackage
我是 Visual Studio 的开发新手,所以我希望我的问题不会太愚蠢 :-)
我尝试在我的 VSPackage 中建立一个 FileWatcher 来检测在当前解决方案中执行的任何更改。
为此,我找到了 class FileWatcher,在我看来,它可以检测任何文件更改。
但是我的代码中的任何内容都一定是错误的,因为没有触发任何事件。
也许你能帮帮我?
我想看的解决方案在D:\\Test 但是输入具体路径没有帮助
class Watcher
{
FileSystemWatcher watcher = new FileSystemWatcher();
[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
public void StartWatching()
{
Debug.WriteLine("in watcher method");
watcher.Path = @"D:\";
watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
| NotifyFilters.FileName | NotifyFilters.DirectoryName;
watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.Created += new FileSystemEventHandler(OnChanged);
watcher.Deleted += new FileSystemEventHandler(OnChanged);
watcher.Renamed += new RenamedEventHandler(OnRenamed);
watcher.EnableRaisingEvents = true;
}
private static void OnChanged(object source, FileSystemEventArgs e)
{
Debug.WriteLine("Changes in folder:" + e.FullPath);
}
private static void OnRenamed(object source, RenamedEventArgs e)
{
Debug.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath);
}
private static void OnDeleted(object source, RenamedEventArgs e)
{
Debug.WriteLine("deleted");
}
private static void OnCreated(object source, RenamedEventArgs e)
{
Debug.WriteLine("created");
}
}
在我调用的 VSPackage 的初始化方法中:
("in watcher method" 显示在输出中,所以这部分应该可以工作)
watch = new Watcher();
watch.StartWatching();
提前给你们加油!
编辑
我发现,测试环境的路径发生了变化。
但现在我遇到了问题,我无法获得更改文件的名称,因为更改事件只给我 .opensdf 或 .sdf
你能帮帮我吗?
您可以使用 Visual Studio 提供的内置事件,而不是自己观察文件更改:SolutionEvents and ProjectItemEvents. This Stack Overflow post 解释了如何在 vs 包中使用它们。
我是 Visual Studio 的开发新手,所以我希望我的问题不会太愚蠢 :-) 我尝试在我的 VSPackage 中建立一个 FileWatcher 来检测在当前解决方案中执行的任何更改。 为此,我找到了 class FileWatcher,在我看来,它可以检测任何文件更改。 但是我的代码中的任何内容都一定是错误的,因为没有触发任何事件。 也许你能帮帮我?
我想看的解决方案在D:\\Test 但是输入具体路径没有帮助
class Watcher
{
FileSystemWatcher watcher = new FileSystemWatcher();
[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
public void StartWatching()
{
Debug.WriteLine("in watcher method");
watcher.Path = @"D:\";
watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
| NotifyFilters.FileName | NotifyFilters.DirectoryName;
watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.Created += new FileSystemEventHandler(OnChanged);
watcher.Deleted += new FileSystemEventHandler(OnChanged);
watcher.Renamed += new RenamedEventHandler(OnRenamed);
watcher.EnableRaisingEvents = true;
}
private static void OnChanged(object source, FileSystemEventArgs e)
{
Debug.WriteLine("Changes in folder:" + e.FullPath);
}
private static void OnRenamed(object source, RenamedEventArgs e)
{
Debug.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath);
}
private static void OnDeleted(object source, RenamedEventArgs e)
{
Debug.WriteLine("deleted");
}
private static void OnCreated(object source, RenamedEventArgs e)
{
Debug.WriteLine("created");
}
}
在我调用的 VSPackage 的初始化方法中: ("in watcher method" 显示在输出中,所以这部分应该可以工作)
watch = new Watcher();
watch.StartWatching();
提前给你们加油!
编辑
我发现,测试环境的路径发生了变化。 但现在我遇到了问题,我无法获得更改文件的名称,因为更改事件只给我 .opensdf 或 .sdf
你能帮帮我吗?
您可以使用 Visual Studio 提供的内置事件,而不是自己观察文件更改:SolutionEvents and ProjectItemEvents. This Stack Overflow post 解释了如何在 vs 包中使用它们。