在字符串数组中存储文件名

时间:2013-04-21 11:18:34

标签: c# file nullreferenceexception

我编写了以下代码来存储字符串数组中的文件名:

string[] fileStore;
private void button1_Click(object sender, EventArgs e)
{
    DirectoryInfo dir1 = new DirectoryInfo(@"D:\data\");
    FileInfo[] files = dir1.GetFiles("*.txt", SearchOption.AllDirectories);

    foreach (FileInfo f in files)
    {
        int a = 0;
        string ss;
        ss = f.Name;

        try
        {
            fileStore[a] = ss.ToString();
            a++;
        }
        catch (Exception ex)
        {
           MessageBox.Show(ex.Message);
        }
    }
}

但是这段代码给出了以下异常:

  

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

2 个答案:

答案 0 :(得分:4)

filestore为空。您可以使用filestore = new string[files.Length]初始化它。

我个人将foreach循环替换为filestore = files.Select(f => f.Name).ToArray()

您的try...catch也是荒谬的。除非你的程序有错误,否则try部分不应该有例外。如果你想要try...catch它应该在文件枚举周围,它应该只捕获一些IO相关的异常,而不是System.Exception

答案 1 :(得分:1)

在声明数组string[]时,您需要在分配数据之前知道确切的大小:

fileStore = filestore = new string[files.Length];

但也许您可以将string[]替换为System.Collections.Generic.List<string>,这不需要您提前知道数组的大小:

List<string> fileStore = null;

// In function:
if( fileStore == null){
    fileStore = new List<string>();
} else {
    fileStore.Clear(); // Optionally remove elements collected so far
}

foreach (FileInfo f in files) {
     fileStore.add( f.Name.ToString());
}

// And you always can export list to array:
string filesStoreArray[] = fileStore.ToArray();