我有一个简单的软件循环 多 到目前为止,我的成功只使用了一次扩展: 我尝试使用此代码在列表到达End时停止循环: 请原谅我的错误,因为我在c#中仍然是Noob但是当我调试它时说
之后我添加了这样的多个扩展程序: 我得到了这个错误( 如果你知道如何轻松获得多扩展
使用像我这样的大量编码,我会很高兴知道它
还有我的循环过程,因为你看到的不是那么好,如果你可以引导我走向正确的方式,我仍然在学习那些对我来说有点困难的事情,因为我来自一个完全不同的环境,提前谢谢Images/videos
并使用(Next
) - (previous
)按钮 逐个显示
string[] FileList = Directory.GetFiles(Dir, "*.jpg", SearchOption.AllDirectories);
int currentPosition = 0;
if (currentPosition != ImageList.Length) currentPosition++;
> IndexOutOfRangeException
string[] VOut_AVI = Directory.GetFiles(@Curr_DirectoryName, "*.avi", SearchOption.AllDirectories);
string[] VOut_MP4 = Directory.GetFiles(@Curr_DirectoryName, "*.mp4", SearchOption.AllDirectories);
string AddMP4 = VOut_MP4[VOut_MP4.Length - 1];
//------ Adding other format to our call ------------
Array.Resize(ref VOut_AVI, VOut_AVI.Length + 1);
VOut_AVI[VOut_AVI.Length - 1] = AddMP4;
// just for test ----->>
MessageBox.Show("Video link : " + VOut_AVI[currentPosition]);
XamlParserException
)。
答案 0 :(得分:0)
Length返回项目数,但它将从索引0,1中检索。
例如,如果您的列表共有2条记录,那么您只能访问0,1索引中的项目。它在第二个索引中不可用,因此会抛出错误。
更改为ImageList.Length-1
要获取具有不同扩展名的所有文件,您可以使用扩展类型为*的EnumerateFiles。您也可以使用where子句过滤文件。
var resufile = Directory.EnumerateFiles(@"fullpath", "*.*", SearchOption.AllDirectories)
.Where(s => s.EndsWith(".mp4") || s.EndsWith(".jpg")); //different extension you can specify it
答案 1 :(得分:0)
要获取具有不同扩展名的文件名列表,请使用Directory.EnumerateFiles
并连接这些查询。
IEnumerable<string> myFilesQuery = new string[] { };
myFilesQuery = myFilesQuery.Concat( Directory.EnumerateFiles( dir, "*.avi", SearchOption.AllDirectories ) );
myFilesQuery = myFilesQuery.Concat( Directory.EnumerateFiles( dir, "*.mp4", SearchOption.AllDirectories ) );
myFilesQuery = myFilesQuery.Concat( Directory.EnumerateFiles( dir, "*.jpg", SearchOption.AllDirectories ) );
// nothing will happen until we call
IList<string> myFiles = myFilesQuery.ToList( );
如果您希望为代码提供一行代码,请编写一个像
这样的帮助程序public static class DirectoryHelper
{
public static IEnumerable<string> EnumerateFiles(
string path,
SearchOption searchOption,
params string[] searchPatterns )
{
if ( searchPatterns == null )
throw new ArgumentNullException( nameof( searchPatterns ) );
IEnumerable<string> result = new string[] { };
foreach ( var searchPattern in searchPatterns )
{
result = result.Concat( Directory.EnumerateFiles( path, searchPattern, searchOption ) );
}
return result;
}
}
在我们的代码中你只有
IList<string> myFiles
= DirectoryHelper
.EnumerateFiles(
dir,
SearchOption.AllDirectories,
"*.avi", "*.mp4", "*.jpg" )
.ToList();
您不必担心任何长度的数组。该列表将包含Count
属性中包含元素的数量。
所有集合都是从零开始的,第一个项目的索引为0,最后一个项目的索引为Count-1
(集合)或Length-1
(数组)。您到currentPosition >= mylist.Count-1
时结束,只要currentPosition < mylist.Count-1
可以增加索引。
<强>更新强>
这里已经有一个关于SO处理具有并行实现的多种搜索模式的答案