9

を使用して、ディレクトリから最後に変更された 5 つのファイルのファイルの場所を保存する方法はありますArrayか?

現在、最後のファイルを取得するために以下のコードを使用しています。

DateTime lastHigh = new DateTime(1900,1,1);
string highDir;
foreach (string subdir in Directory.GetDirectories(path)){
    DirectoryInfo fi1 = new DirectoryInfo(subdir);
    DateTime created = fi1.LastWriteTime;

    if (created > lastHigh){
        highDir = subdir;
        lastHigh = created;
    }
}

Array複数のファイルを添付ファイルとして電子メールアドレスに送信するために使用します。

アップデート

現在、以下のコードを使用して、1 分後に最後に変更されたファイルを取得しています。

string myDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures),
                  "Test Folder");
var directory = new DirectoryInfo(myDirectory);
DateTime from_date = DateTime.Now.AddMinutes(-1);
DateTime to_date = DateTime.Now;
var files = directory.GetFiles().Where(file => file.LastWriteTime >= from_date && file.LastWriteTime <= to_date);

からのファイル名のリストに保存したいfiles

4

3 に答える 3

21

LINQ でこれを行う一般的な方法を次に示します。

 Directory.GetFiles(path)
             .Select(x => new FileInfo(x))
             .OrderByDescending(x => x.LastWriteTime)
             .Take(5)
             .ToArray()

コード例はさまざまなタスクで機能しているように見えるため、これはあなたが望んでいるものではないと思いますが、一般的に、これは質問のタイトルが要求することを行います。

于 2012-07-09T01:35:08.227 に答える
1

stringディレクトリ内のすべてのファイルの完全なファイルパスの配列が必要なようです。

すでにFileInfo列挙可能なものがある場合、これを行うことができます:

var filenames = files.Select(f => f.FullName).ToArray();

ファイル名だけが必要な場合は、に置き換えFullNameますName

于 2012-07-09T01:36:40.053 に答える
1

ポール・フィリップスが提供した答えはうまくいきました。FileInfo.LastWriteTime&FileInfo.LastAccessTimeが常に機能するとは限らないことに注意して ください。OS の構成方法に依存するか、キャッシュの問題である可能性があります。

.NET FileInfo.LastWriteTime と FileInfo.LastAccessTime が間違っている

File.GetLastWriteTime が「古い」値を返しているようです

于 2020-12-13T16:25:03.547 に答える