0

これを使用してルート フォルダーを選択し、このファイルを自分のフォルダーに追加する前に各ディレクトリから最新のファイルを取得してlistboxいますが、場合によっては最新のファイルが選択されません。

var rootDirFile = Directory
    .EnumerateFiles(pathToSearch, "*.doc", SearchOption.TopDirectoryOnly)
    .OrderByDescending(f => File.GetLastWriteTime(f))
    .Take(1);

var allNewestFilesOfEachFolder = Directory
    .EnumerateDirectories(pathToSearch, "*.*", SearchOption.AllDirectories)
    .Select(d => Directory.EnumerateFiles(d, "*.doc")
        .OrderByDescending(f => File.GetLastWriteTime(f))
        .FirstOrDefault());

foreach (string tempFile in rootDirFile.Concat(allNewestFilesOfEachFolder))
{
    //add the file
}
4

3 に答える 3

1

File.GetLastWriteTime WindowsVista/7 では常に信頼できるとは限りません(この投稿の私の回答を参照してください)。

より信頼性の高いソリューションを作成するには、 FileSystemWatcherについて考えることができますが、その場合、何らかの実行中のサービスを使用する必要があります。

または、その「新しい」ファイルが実際に毎回作成される場合、 File.GetCreationTimeの場合の使用について考えることができます。

于 2013-01-29T10:59:42.360 に答える
0

しばらく使用しており、問題ないようです。

File.GetCreationTime作成時間に関係なくファイルを編集しているため使用できません。

while (Directory.GetFiles(dir, "*", SearchOption.TopDirectoryOnly).Count() > 7)
  {
     DirectoryInfo dirInfo = new DirectoryInfo(dir);
     FileSystemInfo fileInfo = dirInfo.GetFileSystemInfos().OrderBy(fileT => fileT.LastWriteTime).First();
     File.Delete(fileInfo.FullName);
  }
于 2013-01-29T11:02:19.810 に答える
0

これにより、ディレクトリと最新のファイルのペアのリストが表示されます。

var latestByDirectory = new DirectoryInfo(_strPath)
    .GetDirectories()
    .Select(d => new
    {
         Directory = d,
        LatestFile = d.GetFiles()
            .OrderByDescending(f => f.CreationTime)
            .DefaultIfEmpty((FileInfo)null)
            .ToList().First()
    });
于 2013-01-29T11:22:57.757 に答える