1

我有一个文件夹,里面有一堆 Visual Studio 2010 解决方案文件夹。

在 Windows 资源管理器中,我按“修改日期”的降序对文件夹进行排序。

如果我在某处的解决方案文件夹中修改 C# 文件,我希望该解决方案文件夹移动到资源管理器列表的顶部。即,我希望将该文件夹视为“已修改”。

是否有启用此行为的 Visual Studio 扩展?或者是否有更直接的方法来对解决方案进行排序,以便最近修改的解决方案首先出现在 Windows 资源管理器中?

我将这个 C# 程序放在一起,该程序用于FileSystemWatcher监视文件夹中的文件更改*.cs并触及它对应的 VS 解决方案文件夹。但是,调用Directory.SetLastWriteTime(path, DateTime.Now)会导致异常;看来,当 VS 打开解决方案时,该目录被锁定,SetLastWriteTime因此无法更新时间。

using System;
using System.IO;

namespace MyDocumentsWatcher
{
    class Program
    {
        static void Main(string[] args)
        {
            var watcher =
                new FileSystemWatcher()
                {
                    Path = "C:/Users/dharmatech/Documents",
                    Filter = "*.cs",
                    NotifyFilter = 
                        NotifyFilters.LastWrite |
                        NotifyFilters.FileName |
                        NotifyFilters.DirectoryName,
                    IncludeSubdirectories = true,
                    EnableRaisingEvents = true
                };

            watcher.Changed += (s, e) =>
                {
                    Console.WriteLine("{0} {1}", e.ChangeType, e.Name);

                    var path = e.FullPath;

                    while (true)
                    {
                        Console.WriteLine(path);
                        if (Path.GetDirectoryName(path) == @"C:\Users\dharmatech\Documents")
                        {
                            Directory.SetLastWriteTime(path, DateTime.Now);
                            break;
                        }
                        else
                            path = Path.GetDirectoryName(path);
                        System.Threading.Thread.Sleep(1000);
                    }
                };

            Console.ReadLine();
        }
    }
}

欢迎任何有关如何实现这一目标的建议!

4

1 回答 1

1

我的解决方案是使用上述程序,但稍作调整。我没有尝试更新LastWriteTimeVS 解决方案文件夹,而是在该文件夹中创建并删除了一个临时文件;具有更新LastWriteTime. 这是该程序的版本:

using System;
using System.IO;

namespace MyDocumentsWatcher
{
    class Program
    {
        static void Main(string[] args)
        {
            var random = new Random();

            var watcher =
                new FileSystemWatcher()
                {
                    Path = @"C:\Users\dharmatech\Documents",
                    Filter = "*.cs",
                    NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName,
                    IncludeSubdirectories = true,
                    EnableRaisingEvents = true
                };

            watcher.Changed += (s, e) =>
                {
                    Console.WriteLine("{0} {1}", e.ChangeType, e.Name);

                    var path = e.FullPath;

                    while (true)
                    {
                        if (Path.GetDirectoryName(path) == @"C:\Users\dharmatech\Documents")
                        {
                            var tmp = Path.Combine(path, random.Next().ToString());
                            using (File.Create(tmp)) { }
                            File.Delete(tmp);
                            break;
                        }
                        else
                            path = Path.GetDirectoryName(path);
                    }
                };

            Console.ReadLine();
        }
    }
}
于 2012-11-03T05:17:06.703 回答