C#Directory.GetFiles()只显示列表中的一个文件?

时间:2014-11-23 16:19:45

标签: c#

我正在尝试学习C#,我从一些简单的东西开始。

我正在尝试创建一个简单的程序,它将读取目录中.XLS扩展名的所有文件。我似乎部分工作,但它只读取它看到的文件。

我认为foreach声明会对此进行处理并列出所有内容,但它似乎无法正常工作。

如果有人能让我朝着正确的方向前进,我会非常感激。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        GetFiles();
    }

    private void GetFiles()
    {
        List<String> Myfiles = new List<string>();
        string[] allFiles = System.IO.Directory
                            .GetFiles(@"C:\Users\Dave\Desktop\STUFF", "*.*");

        if (allFiles.Length > 0)
        {
            try
            {
                foreach (string filename in allFiles)
                {
                    this.richTextBox1.Text = filename.ToString();
                }
            }   

            catch (SystemException excpt)
            {
                this.richTextBox1.Text = excpt.Message;
            }
        }
    }

4 个答案:

答案 0 :(得分:0)

因为您需要xls文件,请更新以下行:

string[] allFiles = System.IO.Directory.GetFiles(@"C:\Users\Dave\Desktop\STUFF", "*.xls");

您可能会在编辑框中看到一个文件。因此,请更新以下行:

this.richTextBox1.AppendText(filename + Environment.NewLine);

答案 1 :(得分:0)

我认为这可能是由这条线引起的: this.richTextBox1.Text = filename.ToString();

您每次都会覆盖文本框的文本,导致只将最后一个文件名写入richtextbox。您应该将文件名字符串附加到richTextBox而不是分配。

答案 2 :(得分:0)

快速浏览一下我认为你的问题就在这里:

this.richTextBox1.Text = filename.ToString();

您正在为文本属性分配最后一个循环迭代,而不是为每个文件附加一个新行。

尝试调试for循环,你有多次迭代吗?

答案 3 :(得分:0)

xls的过滤文件:

string[] allFiles = System.IO.Directory.GetFiles(@"C:\Users\Dave\Desktop\STUFF", "*.xls");

并将您的try块代码更新为:

   try
        {
            this.richTextBox1.Text= string.Join(Environment.NewLine, allFiles);
            //foreach (string filename in allFiles)
            //{
           //     this.richTextBox1.Text = filename.ToString();

            //}
        }