首页 > 解决方案 > C# 为字符串数组的每个项目设置特定的开始和结束位置

问题描述

我正在尝试读取特定文件夹中所有文件的名称,然后将每个文件名添加为列表框中的一个项目。问题是这样做时,我的列表框正在显示完整的文件路径。

我尝试了几种不同的方法,感觉从每个项目中删除“C:\Client\TestFolder\”和“.txt”应该非常容易。然而似乎没有任何工作:(非常感谢任何帮助!

        string[] filePaths = Directory.GetFiles(@"C:\Client\TestFolder\", "*.txt", SearchOption.TopDirectoryOnly);
        listBox1.Items.AddRange(filePaths);
        string[] titleArray = new string[listBox1.Items.Count];

        for (int i = 0; i < listBox1.Items.Count; i++)
        {
            titleArray[i] = listBox1.Items[i].ToString();
        }

        Array.Sort(titleArray);
        listBox1.Items.Clear();

        for (int i = 0; i < titleArray.Length; i++)
        {
            listBox1.Items.Add(titleArray[i].ToString());
        }

例如,如果文件路径 C:\Client\TestFolder\ 包含 3 个 .txt 文件:

  1. test1.txt
  2. test2.txt
  3. test3.txt

我的列表框将显示:

  1. C:\Client\TestFolder\test1.txt
  2. C:\Client\TestFolder\test2.txt
  3. C:\Client\TestFolder\test3.txt

期望的结果:

  1. 测试1
  2. 测试2
  3. 测试3

标签: c#arraysstringlistbox

解决方案


您可以使用Path.GetFileNameWithoutExtension

使用您的代码的示例:

string[] filePaths = Directory.GetFiles(@"C:\Client\TestFolder\", "*.txt", SearchOption.TopDirectoryOnly);
listBox1.Items.AddRange(filePaths);
string[] titleArray = new string[listBox1.Items.Count];

for (int i = 0; i < listBox1.Items.Count; i++)
{
    titleArray[i] = listBox1.Items[i].ToString();
}

Array.Sort(titleArray);
listBox1.Items.Clear();

for (int i = 0; i < titleArray.Length; i++)
{
    listBox1.Items.Add(Path.GetFileNameWithoutExtension(titleArray[i]));
}

推荐阅读