-1

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

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);
        }
    }
}

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

你调用的对象是空的。

4

2 回答 2

4

filestore一片空白。你可以用 初始化它filestore = new string[files.Length]

就我个人而言,我会将您的整个foreach循环替换为filestore = files.Select(f => f.Name).ToArray().

try...catch的也是胡说八道。try除非您的程序有错误,否则零件中不应出现异常。如果你想要一个try...catch它应该围绕文件枚举,它应该只捕获一些与 IO 相关的异常,而不是System.Exception.

于 2013-04-21T11:21:16.280 回答
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();
于 2013-04-21T11:25:09.167 回答