1

Visual Studio 2010 ソリューション フォルダーが多数含まれるフォルダーがあります。

Windows エクスプローラーで、「更新日」の降順でフォルダーを並べ替えています。

どこかのソリューション フォルダーの奥深くにある C# ファイルを変更した場合、そのソリューション フォルダーをエクスプローラー リストの一番上に移動したいと思います。つまり、そのフォルダーを「変更済み」と見なしたいと思います。

この動作を可能にする Visual Studio の拡張機能はありますか? または、最近変更されたソリューションが Windows エクスプローラーで最初に表示されるように、ソリューションを並べ替えるより簡単な方法はありますか?

FileSystemWatcherファイルへの変更についてフォルダーを監視し、*.cs対応する VS ソリューション フォルダーにアクセスするために使用するこの C# プログラムをまとめました。ただし、この呼び出し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

私の解決策は、上記のプログラムを使用することでしたが、微調整を加えました。VS ソリューション フォルダーの更新を試みる代わりにLastWriteTime、そのフォルダーに一時ファイルを作成して削除します。を更新する効果があり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 に答える