winforms 如何获取最后一个文件夹之前的文件夹?

tv6aics1  于 2022-12-27  发布在  其他
关注(0)|答案(2)|浏览(178)

首先我得到了最后一个文件夹(3),然后我想得到它之前的文件夹(2),但在我的代码中,它得到了第一个文件夹(1),我想得到(2)。

var lastWrittenFolder = new DirectoryInfo(textBoxPath.Text).GetDirectories()
                       .OrderByDescending(d => d.LastWriteTimeUtc).First();

var firstWrittenFolder = new DirectoryInfo(textBoxPath.Text).GetDirectories()
                       .OrderBy(d => d.CreationTimeUtc).First();

var F = Directory.GetFiles(lastWrittenFolder.FullName, "*.gif").Last();
var LF = Directory.GetFiles(firstWrittenFolder.FullName, "*.gif").Last();`

变量名是错误的,我会修复它,但我想代替firstWritenFolder,它将是:writenFolderBeforeLast所以最后我会得到最后一个文件夹的最后一个文件和之前文件夹中的最后一个文件。
这一点:

var firstWrittenFolder = new DirectoryInfo(textBoxPath.Text).GetDirectories()
                        .OrderBy(d => d.CreationTimeUtc).First();

应在以下时间之前获取文件夹:

var lastWrittenFolder = new DirectoryInfo(textBoxPath.Text).GetDirectories()
                        .OrderByDescending(d => d.LastWriteTimeUtc).First();

最后,首先检查是否有超过1个文件夹,因为它不应该得到之前的一个,因为它还不存在。
我尝试了上面的代码,但是得到的是第一个文件夹,而不是最后一个文件夹之前的文件夹。我想从最后一个文件夹中得到最后一个文件,从最后一个文件夹之前的文件夹中得到最后一个文件。

bd1hkmkf

bd1hkmkf1#

你可以得到倒数第二个文件夹喜欢和最后一个文件从它使用下面的逻辑。

var folders = new DirectoryInfo(textBoxPath.Text).GetDirectories()
                .OrderByDescending(d => d.LastWriteTimeUtc);

if (folders.Count() > 1)
{
    var writtenFolderBeforeLast = folders.Skip(1).Take(1).First();

    var lastFileInFolderBeforeLast = Directory.GetFiles(writtenFolderBeforeLast.FullName, "*.gif").Last();
}
syqv5f0l

syqv5f0l2#

请注意,GetDirectories()会返回一个 array,您可以轻松使用它:

// We have an array as the result:
DirectoryInfo[] allDirs = new DirectoryInfo(textBoxPath.Text).GetDirectories();

// After sorting the array, we can easily get...
Array.Sort(allDirs, (a, b) => a.LastWriteTimeUtc.CompareTo(b.LastWriteTimeUtc));

// ... its first item
var firstWrittenFolder = allDirs.Length > 0 ? allDirs[0] : default;
// ... second from the end item
var beforeLast = allDirs.Length > 1 ? allDirs[allDirs.Length - 2] : default;

// Files within the second last directory
if (allDirs.Length > 1) {
  var files = allDirs[allDirs.Length - 2].GetFiles();

  ...
}

寻址IO很可能是“耗时的”,我们应该避免“过于频繁地”调用.GetDirectories(),这就是为什么我们“只”调用一次,获得一个数组,然后只使用这个数组。

相关问题