C#OpenFiledialog多选字符串数组

时间:2017-03-21 14:39:14

标签: c# dialog

我想存储在我的字符串数组中选择的文件名。

代码:

if (openFileDialog.ShowDialog() == DialogResult.OK)
       string filename ;
       string[] result = null;
       int i = 0;
      try                {
                if ((myStream = openFileDialog.OpenFile()) != null)
                {
                    foreach (String file in openFileDialog.FileNames)
                    {
                        filename = Path.GetFileName(file);
                        result[i] = filename;
                        MessageBox.Show(result[i]); // only show the name of file
                        i = i + 1;

                    }                  
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error: Could not read file from disk.   Original error: " + ex.Message);
            }

错误代码是:“索引超出了数组”

我该如何解决?

2 个答案:

答案 0 :(得分:3)

如果您事先知道要添加多少项,则应该只使用数组。您应该使用列表,以便始终可以添加额外的内容。因为你从来没有定义数组的大小,所以你会得到错误。

如果你动态地添加内容,你应该使用列表。

List<string> result = new List<string>();

添加时

result.add(filename);

显示

MessageBox.Show(result[i])

所以你的代码将是

if (openFileDialog.ShowDialog() == DialogResult.OK)
   string filename ;
   List<string> result = new List<string>();
   int i = 0;
  try                {
            if ((myStream = openFileDialog.OpenFile()) != null)
            {
                foreach (String file in openFileDialog.FileNames)
                {
                    filename = Path.GetFileName(file);
                    result.add(filename);
                    MessageBox.Show(result[i]); // only show the name of file
                    i = i + 1;

                }                  
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error: Could not read file from disk.   Original error: " + ex.Message);
        }

答案 1 :(得分:0)

您无法使用string[] result = null; 如果您将此更改为string[] result = new string[3];,那么您的解决方案将正常运行,但这不是正确的方法,而是使用List<String>

if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                string filename;
                List<string> result = new List<string>();
                int i = 0;
                try
                {
                    if ((myStream = openFileDialog.OpenFile()) != null)
                    {
                        foreach (String file in openFileDialog.FileNames)
                        {
                            filename = Path.GetFileName(file);
                            result.Add(filename);
                            MessageBox.Show(result[i]); // only show the name of file

                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error: Could not read file from disk.   Original error: " + ex.Message);
                }
            }