使用foreach在c#中将一个数组的名称存储在另一个数组中

jcr*_*ael 0 c#

现在我有一个目录,其中包含名称格式为"EXT2-401-B-140422-1540-1542.mp4"的字符串文件,其中"140422"部分表示日期.现在假设这一堆文件的日期类似于140421,140422,140423 ......(每个日期都有几个文件).现在我将根据他们的日期对这些文件进行排序,所以我想知道如何获得这些名称(140421,140422等).我试过这样的:

directory = new DirectoryInfo(camera_dir);    
string[] date = new string[directory.GetFiles().Length];
foreach (FileInfo file in directory.GetFiles())
{ 
    foreach(string name in date)
    {
        name = file.Name.Substring(11, 6);
    }
}
Run Code Online (Sandbox Code Playgroud)

并且错误消息是我无法分配给名称.所以有人可以帮忙吗?

Gro*_*roo 5

您可以使用LINQ来简化这一点.

要获取文件名,您只需将每个项目投影FileInfostring:

var dates = directory
    .EnumerateFiles("*.mp4")
    .Select(f => f.Name)
    .ToArray();
Run Code Online (Sandbox Code Playgroud)

要获取有序列表,还需要使用OrderBy并指定用于排序的值:

var dates = directory
    .EnumerateFiles("*.mp4")
    .Select(f => f.Name)
    .OrderBy(f => f.Substring(11, 6)) // this will throw if string is too short
    .ToArray();
Run Code Online (Sandbox Code Playgroud)

您还应该添加一些验证,以防止在文件名格式不正确时出现异常.您至少可以检查字符串是否足够长以提取这6个字符:

var dates = directory
    .EnumerateFiles("*.mp4")
    .Select(f => f.Name)
    .Where(f => f.Length >= 17) // check if there are enough characters
    .OrderBy(f => f.Substring(11, 6))
    .ToArray();
Run Code Online (Sandbox Code Playgroud)