0

这列出了我使用folderBrowserDialog1选择的目录中所有目录中的所有文件,但是当它将它们加载到listBox中时,它会像这样在listBox中出现项目

C:\用户\用户名\桌面\文件名.exe

C:\用户\用户名\桌面\文件名.exe

C:\用户\用户名\桌面\文件名.exe

等等..有什么方法可以删除 C:\users\username\desktop\ 并保留 filename.exe

这是我的代码,它可能会有所帮助。

private void DirSearch(string dir)
    {
        string[] files = Directory.GetFiles(folderBrowserDialog1.SelectedPath, "*.*", SearchOption.AllDirectories);

        foreach (var file in files)
        {
            ListBox2.Items.Add(file);
        }
    }
4

3 回答 3

3

使用Path.GetFileName方法:

 ListBox2.Items.Add(Path.GetFileName(file));
于 2012-12-19T06:04:59.177 回答
1

从您对@Dennis 的评论来看,这应该可行。

private void DirSearch(string dir)
    {
        string[] files = Directory.GetFiles(folderBrowserDialog1.SelectedPath, "*.*", SearchOption.AllDirectories);

        foreach (var file in files)
        {
            ListBox2.Items.Add(file.Replace(dir, string.empty);
        }
    }
于 2012-12-19T06:12:36.520 回答
1

尝试递归方法

私人无效Form1_Load(对象发送者,EventArgs e){

        DirSearch(folderBrowserDialog1.SelectedPath);
    }
    private void DirSearch(string dir)
    {
        try
        {
            string userpath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            folderBrowserDialog1.ShowDialog();
            string[] files = Directory.GetFiles(folderBrowserDialog1.SelectedPath, "*.*", SearchOption.AllDirectories);
            if (!dir.Equals(userpath))
            {
                foreach (var file in files)
                {
                    listBox1.Items.Add(System.IO.Path.GetFileName(file));
                }
                IEnumerable<string> dirs = Directory.EnumerateDirectories(dir);
                foreach (string dsdir in dirs)
                {
                    DirSearch(dsdir);
                }
            }
        }
        catch (Exception ex)
        {
        }
    }
于 2012-12-19T06:19:24.707 回答