字符串数组到ListView

时间:2013-10-09 09:45:25

标签: c# arrays listview

所以我在一个目录中得到了一堆文件。

他们都是这样命名的:

  • 丹尼尔-2013-09-10.jpg
  • 彼得-2012-05-06.jpg
  • 克里斯蒂安-2011-01-08.jpg

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

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

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

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

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

所以我想到用foreach拆分数组中的信息,然后使用另一个循环在ListView中写入数据,但我不确切知道如何做到这一点。

感谢任何帮助^^

干杯

3 个答案:

答案 0 :(得分: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);
}

结果:

end result

这是您的起点。我会留下我错过的细节。

答案 1 :(得分:1)

foreach很好。然后,您需要将字符串解析为变量。然后你需要添加到listview。尝试谷歌搜索“listview c#add item”

答案 2 :(得分:0)

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

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

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