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");
}
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"
它仍然返回一个副本,你仍然需要存储结果的地方!
list1[n] = Path.GetFileNameWithoutExtension(list1[n]);
对任何负面评价此回复的人:下次请附上评论,我真的好奇为什么。我应该添加更多的解释或例子,还是“tl; dr”也许?嘿嘿。对不起,我真的很好奇:) – quetzalcoatl 2013-04-08 12:59:49
@ user2257583:没有问题,从C++可变字符串或Ruby的gsub!():)移动时常见的事情: – quetzalcoatl 2013-04-08 13:02:10
使用Path.GetFileNameWithoutExtension。这就是网点的美丽。 “ – 2013-04-08 13:12:43
尝试像下面ITE会帮助你....
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));
Path.GetFileNameWithoutExtension() – 2013-04-08 12:49:22
我不知道如何实现,在我的代码(以上)我已经处理字符串列表中的文件名称 – ffxdean 2013-04-08 12:50:35
您可以使用System.IO.Path类中的静态操作来处理扩展。想到的是GetExtension()或者GetFileNameWithoutExtension()可以想到 即使只有一行,您也应该总是使用{}作为块...您的一个块如果块不同于第二块...... – 2013-04-08 12:50:51