【问题标题】:Copy filename from directoriy into generic list将文件名从目录复制到通用列表
【发布时间】:2016-09-25 22:01:08
【问题描述】:

我有一个奇怪的行为,不知道从这里去哪里。我正在尝试从目录中读取文件名并将其添加到<string> 类型的通用列表中。

string path = @"C:\mydir\";

foreach (string s in Directory.GetFiles(path, "*.bak").Select(System.IO.Path.GetFileName))
{
    GenericList1.Add(s);

}

我得到错误:

对象引用未设置为对象的实例。

当我调试时,我看到变量 s 将文件名显示为值。事实上,我在使用时可以看到价值:

foreach (string s in Directory.GetFiles(path, "*.bak").Select(System.IO.Path.GetFileName))
{
    System.Windows.Forms.MessageBox.Show(s);           
}

任何人都知道我在这里可能出错的地方吗?

【问题讨论】:

    标签: c# list directory getfiles


    【解决方案1】:
     foreach (string s in Directory.GetFiles(path, "*.bak").Select(p => Path.GetFileName(p)))
            {
                GenericList1.Add(s);
    
            }  
    

    Select 方法需要一个函数来对每个对象执行。最简单的方法是使用简单的 lambda。

    在使用 lambda 时,您基本上是在创建一个匿名方法或函数。 Select 方法需要知道要对集合的每个项目执行什么功能或操作。在这种情况下,您想要获取由GetFiles 方法返回的集合中每个项目的文件名。如果您需要更多解释,请告诉我。

    【讨论】:

    • 嗨,阿德里安,我使用了 lambba,即使变量本身包含实际的文件名,仍然会得到相同的 null 值传递到列表中。我正在尝试stackoverflow.com/questions/3694676/… 下的建议
    • 实际上,我确实通过将数据插入数组然后将该数组添加到通用列表中来解决问题。所以我有解决方案。但对最初的问题感到好奇
    • 你能把你的代码放在一个粘贴桶上,然后把链接发给我吗?我很好奇为什么它也不适合你。应该没有问题
    • 字符串[] 文件名 = { };
    • 字符串[] 文件名 = { };列表 GenericList1 = 新列表();文件名 = Directory.GetFiles(foldername, "*.txt").Select(x => System.IO.Path.GetFileName(x)).ToArray(); if (filenames .Length > 0) { GenericList1 = filenames.ToList(); }
    猜你喜欢
    • 2014-01-03
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多