现在我有一个目录,其中包含名称格式为"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)
并且错误消息是我无法分配给名称.所以有人可以帮忙吗?
您可以使用LINQ来简化这一点.
要获取文件名,您只需将每个项目投影FileInfo到string:
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)
| 归档时间: |
|
| 查看次数: |
569 次 |
| 最近记录: |