【问题标题】:.Net FileSystemWatcher when renaming file oldName is null.Net FileSystemWatcher 重命名文件 oldName 时为空
【发布时间】: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?

标签: filesystemwatcher .net


【解决方案1】:

我已更新到 Windows 8.1,现在我按预期获得了 OldName..

【讨论】:

  • 我突然在 Windows 7 中使用我的 Framework 4 应用程序得到了这个。我升级到 Framework 4.5.1 无济于事,尽管相同的代码确实在 Windows 8.1 上继续工作。我想这可能是最近的 Windows 更新,但我赶上了另一个 Windows 7 机器上的更新,而那个问题不存在。有没有关于这个奇怪问题的消息?
猜你喜欢
  • 2018-12-11
  • 1970-01-01
  • 2013-08-27
  • 2015-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-08
相关资源
最近更新 更多