获取文件夹中的下一个文件

时间:2014-11-09 20:20:09

标签: c# file directory system.io.directory

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

问题是:如何在文件夹中给出当前文件路径的下一个文件的路径?

2 个答案:

答案 0 :(得分:3)

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

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,如果是,则返回第一个文件等。

答案 1 :(得分: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,请使用链接列表来标识上一个路径。