1

所以我在一个目录中有一堆文件。

它们都是这样命名的:

  • 丹尼尔-2013-09-10.jpg
  • 彼得-2012-05-06.jpg
  • Christiane-2011-01-08.jpg

所以我将所有这些项目放在一个目录中并将它们放入一个数组中:

string[] pictures = Directory.GetFiles(@"C:/Pictures", "*.jpg");

我得到了一个包含 3 列、名称、日期和文件大小的 ListView。

我想从文件名中获取所有这些信息,然后将它们放入列表视图中。所以对于这三个文件,它看起来像这样:

名称-------------日期-----------------文件大小
丹尼尔---- ---------10. 2013 年 9 月--------26 KB
彼得-------------06。2012 年 5 月-----39 KB
克里斯蒂安--------08。2011 年 1 月------------35 KB

所以我想用拆分数组中的信息,foreach然后使用另一个循环将数据写入 ListView,但我不知道具体该怎么做。

任何帮助表示赞赏^^

干杯

4

3 回答 3

5

我感觉太慷慨了..通常我会说自己开始..但这似乎是睡前拼凑起来的一件有趣的事情。

class PictureLoader {
    private readonly string[] _images;

    public PictureLoader(string path) {
        _images = Directory.GetFiles(path, "*.jpg");
    }

    public IEnumerable<Tuple<string, string, string>> GetRowData() {
        foreach (var imagePath in _images) {
            var extension = Path.GetExtension(imagePath);
            var fileName = Path.GetFileName(imagePath);
            var regex = Regex.Match(fileName, @"([A-Za-z]+)-(\d{4}-\d{2}-\d{2})(.[A-Za-z]+)");
            var name = regex.Groups[1].Value;
            var date = DateTime.ParseExact(regex.Groups[2].Value, "yyyy-MM-dd", CultureInfo.InvariantCulture);

            yield return
                new Tuple<string, string, string>(name + extension, date.ToString(),
                    (new FileInfo(imagePath).Length / 1024).ToString() + " KB");
        }
    }
}

用法:

var pictureLoader = new PictureLoader(@"folder here");

foreach (var group in pictureLoader.GetRowData()) {
    var item = new ListViewItem();
    item.Text = group.Item1;
    item.SubItems.Add(group.Item2);
    item.SubItems.Add(group.Item3);

    listView1.Items.Add(item);
}

结果是:

最终结果

这是你的起点。我会把我错过的微小细节留给你。

于 2013-10-09T10:04:44.007 回答
1

foreach很好。然后你需要将字符串解析成你的变量。然后你需要添加到列表视图。尝试谷歌搜索“listview c# add item”

于 2013-10-09T09:51:34.183 回答
0

我认为您可以使用 foreach 浏览所有文件。在每个循环中,您必须使用用于拆分名称的正则表达式来拆分文件的名称。

您可以通过代码获得的文件大小。

因此,您可以在网格中显示相关数据。

于 2013-10-09T09:49:23.140 回答