C#从字符串列表中删除文件扩展名

问题描述:

我的程序的功能基本上是将文件名(包括它的扩展名)从目录列表到列表框中。然后它有一个排序功能,将列表字符串按字母顺序排序。C#从字符串列表中删除文件扩展名

最后它有一个二进制搜索功能,允许用户输入任何字符串,然后程序将比较并将匹配结果显示到列表框中。

现在,所有这些功能都能正常工作,但是我似乎无法在搜索后删除文件名的扩展名。

例如,在扫描和分类情况下它列出了文件名称为:FILENAME.MP3现在

,我想要它做搜索按钮被点击时是删除文件扩展名,并只显示文件名。

private void buttonSearch_Click(object sender, RoutedEventArgs e) 
    { 

     listBox1.Items.Clear(); 

     string searchString = textBoxSearchPath.Text; 


     int index = BinarySearch(list1, 0, list1.Count, searchString); 

     for (int n = index; n < list1.Count; n++) 
     { 
      //Removes file extension from last decimal point ''not working'' 
      int i = list1[n].LastIndexOf("."); 
      if (i > 0) 
       list1[n].Substring(0, i); 

      // Adds items to list 
      if (list1[n].IndexOf(searchString, StringComparison.OrdinalIgnoreCase) != 0) break; 
      listBox1.Items.Add(list1[n]); 
     } 
     MessageBox.Show("Done"); 
    } 
+2

Path.GetFileNameWithoutExtension() – 2013-04-08 12:49:22

+0

我不知道如何实现,在我的代码(以上)我已经处理字符串列表中的文件名称 – ffxdean 2013-04-08 12:50:35

+0

您可以使用System.IO.Path类中的静态操作来处理扩展。想到的是GetExtension()或者GetFileNameWithoutExtension()可以想到 即使只有一行,您也应该总是使用{}作为块...您的一个块如果块不同于第二块...... – 2013-04-08 12:50:51

Substring方法返回从源代码复制的字符串新的新副本。如果你想“切拓客”,那么你必须获取哪些子串回报,它存储在某处,即:

int i = list1[n].LastIndexOf("."); 
if (i > 0) 
    list1[n] = list1[n].Substring(0, i); 

然而,这是删除扩展非常奇怪的方式。

首先,使用Substring(0,idx)是奇怪,因为有一个Remove(idx)(link)这正是这么做的:

int i = list1[n].LastIndexOf("."); 
if (i > 0) 
    list1[n] = list1[n].Remove(i); 

但是,sencondly,还有的甚至更好的做这件事的方式:System.IO.Path类为您提供了一整套完善写静态方法,例如,去掉扩展名(编辑:这是L-三人在意见提出),具有完全处置点和等:

var str = System.IO.Path.GetFileNameWithoutExtension("myfile.txt"); // == "myfile" 

MSDN link

它仍然返回一个副本,你仍然需要存储结果的地方!

list1[n] = Path.GetFileNameWithoutExtension(list1[n]); 
+0

对任何负面评价此回复的人:下次请附上评论,我真的好奇为什么。我应该添加更多的解释或例子,还是“tl; dr”也许?嘿嘿。对不起,我真的很好奇:) – quetzalcoatl 2013-04-08 12:59:49

+0

@ user2257583:没有问题,从C++可变字符串或Ruby的gsub!():)移动时常见的事情: – quetzalcoatl 2013-04-08 13:02:10

+0

使用Path.GetFileNameWithoutExtension。这就是网点的美丽。 “ – 2013-04-08 13:12:43

C#非常简单,如果在框架中需要花费2分钟以上,there probably is a method for it

尝试像下面ITE会帮助你....

说明:Filename without Extension

 listBox1.Items.Add(Path.GetFileNameWithoutExtension(list1[n])); 

使用Path.GetFileNameWithoutExtension方法。我猜很容易。

http://msdn.microsoft.com/en-us/library/system.io.path.getfilenamewithoutextension.aspx

不知道你是如何实现你的目录搜索,但你可以在这些情况下,清洁利用LINQ,你的优势,容易阅读代码:

var files = Directory.EnumerateFiles(@"\\PathToFiles") 
      .Select(f => Path.GetFileNameWithoutExtension(f)); 

如果你使用.NET 4.0,枚举文件似乎是比GetFiles更好的选择。但是,它也听起来像你想要获得完整的文件路径和文件名而不需要扩展名。这里是你如何可以创建一个字典,所以你会消除通过收集循环两次:

var files = Directory.EnumerateFiles(@"\\PathToFiles") 
      .ToDictionary(f => f, n => Path.GetFileNameWithoutExtension(n));