4

在 Windows 照片查看器中打开图片时,您可以使用箭头键在支持的文件之间来回导航(下一张照片/上一张照片)。

问题是:给定文件夹中当前文件的路径,如何获取下一个文件的路径?

4

2 回答 2

3

您可以通过将所有路径放入一个集合并保留一个计数器来轻松地做到这一点。如果您不想将所有文件路径加载到内存中,您可以使用Directory.EnumerateFiles方法Skip来获取下一个或上一个文件。例如:

int counter = 0;

string NextFile(string path, ref int counter)
{
    var filePath = Directory.EnumerateFiles(path).Skip(counter).First();
    counter++;
    return filePath;
}

string PreviousFile(string path, ref int counter)
{
    var filePath = Directory.EnumerateFiles(path).Skip(counter - 1).First();
    counter--;
    return filePath;
}

当然你需要一些额外的检查,例如NextFile你需要检查你是否到达最后一个文件,你需要重置计数器,同样PreviousFile你需要确保计数器不是0,如果是,则返回第一个文件等。

于 2014-11-09T20:29:28.857 回答
1

鉴于您关心给定文件夹中的大量文件,并希望按需加载它们,我建议采用以下方法 -

(注意 - 调用Directory.Enumerate().Skip...其他答案的建议有效,但效率不高,特别是对于具有大量文件的目录,以及其他一些原因)

// Local field to store the files enumerator;
IEnumerator<string> filesEnumerator;

// You would want to make this call, at appropriate time in your code.
filesEnumerator = Directory.EnumerateFiles(folderPath).GetEnumerator();

// You can wrap the calls to MoveNext, and Current property in a simple wrapper method..
// Can also add your error handling here.
public static string GetNextFile()
{
    if (filesEnumerator != null && filesEnumerator.MoveNext())
    {
        return filesEnumerator.Current;
    }

    // You can choose to throw exception if you like..
    // How you handle things like this, is up to you.
    return null;
}

// Call GetNextFile() whenever you user clicks the next button on your UI.

编辑:当用户移动到下一个文件时,可以在链接列表中跟踪以前的文件。逻辑基本上看起来像这样 -

  1. 使用链接列表进行上一个和下一个导航。
  2. 在初始加载或点击 时Next,如果链表或其下一个节点为空,则使用上述GetNextFile方法,找到下一个路径,显示在 UI 上,并将其添加到链表中。
  3. 用于Previous使用链表来识别先前的路径。
于 2014-11-09T21:07:31.267 回答