3

ファイルのサブフォルダーを含むフォルダーがあります。変更時刻までに最新のファイル名を取得したいと思います。各フォルダーとファイルをループして検索する以外に、これを見つけるより効率的な方法はありますか?

4

6 に答える 6

3

あなたがそれをどのようにしたいかによって異なります。ソフトウェアを起動して探しますか、それとも継続的に実行して追跡しますか?

最後のケースでは、FileSystemWatcher クラスを利用するとよいでしょう。

于 2008-12-29T15:38:16.597 に答える
2

オブジェクトを使用しFileSystemWatcherます。

Dim folderToWatch As New FileSystemWatcher
folderToWatch.Path = "C:\FoldertoWatch\"
AddHandler folderToWatch.Created, AddressOf folderToWatch_Created
folderToWatch.EnableRaisingEvents = True
folderToWatch.IncludeSubdirectories = True
Console.ReadLine()

次に、ハンドラー (ここでは folderToWatch_Created と呼ばれる) を作成し、次のようにします。

Console.WriteLine("File {0} was just created.", e.Name)
于 2008-12-29T15:50:38.913 に答える
1

FileSystemWatcher を使用すると、アプリが読み込まれた後にこの情報を知る必要があるだけであると仮定して機能します。それ以外の場合は、ループする必要があります。このようなものはうまくいきます(そして再帰を使用しません):

Stack<DirectoryInfo> dirs = new Stack<DirectoryInfo>();
FileInfo mostRecent = null;

dirs.Push(new DirectoryInfo("C:\\TEMP"));

while (dirs.Count > 0) {
    DirectoryInfo current = dirs.Pop();

    Array.ForEach(current.GetFiles(), delegate(FileInfo f)
    {
        if (mostRecent == null || mostRecent.LastWriteTime < f.LastWriteTime)
            mostRecent = f;
    });

    Array.ForEach(current.GetDirectories(), delegate(DirectoryInfo d)
    {
        dirs.Push(d);
    });
}

Console.Write("Most recent: {0}", mostRecent.FullName);
于 2008-12-29T16:05:23.190 に答える
1

Linq が好きなら、linq to object を使用して、ファイルシステムを好きなようにクエリすることができます。ここにサンプルを示します。おそらく 4 行のコードで試してみて、必要なものを取得できます。アプリにフォルダーへの適切なアクセス権があることを確認してください。

于 2008-12-29T17:41:50.077 に答える
0

PowerShellがインストールされている場合、コマンドは次のようになります。

dir -r | select Name, LastWriteTime | sort LastWriteTime -DESC | select -first 1

このようにして、必要に応じてスクリプトを実行し、処理のために名前 (またはフル パス) をシステムに戻すことができます。

于 2008-12-29T15:49:38.183 に答える