在Windows照片查看器中打开图片时,可以使用箭头键(下一张照片/上一张照片)在支持的文件之间前后导航。
问题是:如何在文件夹中给出当前文件路径的下一个文件的路径?
答案 0 :(得分: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
,如果是,则返回第一个文件等。
答案 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.
编辑:当用户移动到下一个文件时,可以在链接列表中跟踪以前的文件。 逻辑基本上看起来像这样 -
Next
时,如果链接列表或其下一个节点为空,则使用上面的GetNextFile
方法查找下一个路径,在UI上显示并添加它到链表。 Previous
,请使用链接列表来标识上一个路径。