从字符串列表中删除文件扩展名
本文关键字:文件 扩展名 删除 字符串 列表 | 更新日期: 2023-09-27 18:08:16
我的程序做的基本上是它列出文件名(包括它的扩展名)从一个目录到一个列表框。然后,它有一个排序函数,将列表字符串按字母顺序排序。
最后,它有一个二进制搜索功能,允许用户输入任何字符串,然后程序将比较并将匹配的结果显示在列表框中。
现在,所有这些功能都工作得很好,但是我似乎无法在搜索后删除文件名的扩展名。
例如,在扫描和排序部分,它列出了文件名: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");
}
c#是如此简单,如果某件事需要花费超过2分钟,那么在框架中可能有一个方法。
Substring
方法返回从源字符串复制的新的字符串副本。如果你想"切断扩展",那么你必须获取Substring返回的内容并将其存储在某个地方,即:
int i = list1[n].LastIndexOf(".");
if (i > 0)
list1[n] = list1[n].Substring(0, i);
然而,这是一个非常奇怪的方式来删除扩展。
首先,使用Substring(0,idx)
是奇怪的,因为有一个Remove(idx)
(链接)正是这样做的:
int i = list1[n].LastIndexOf(".");
if (i > 0)
list1[n] = list1[n].Remove(i);
但是,其次,有更好的方法:System.IO.Path
类为您提供了一组编写良好的静态方法,例如,删除扩展(编辑:这是L-Three在评论中建议的),完全处理点等:
var str = System.IO.Path.GetFileNameWithoutExtension("myfile.txt"); // == "myfile"
参见MSDN link
它仍然返回一个副本,你仍然需要将结果存储在某个地方!
list1[n] = Path.GetFileNameWithoutExtension( list1[n] );
试试下面的方法,它会帮助你....
说明:文件名没有扩展名
listBox1.Items.Add(Path.GetFileNameWithoutExtension(list1[n]));
使用Path.GetFileNameWithoutExtension
使用路径。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, Enumerate文件似乎是比GetFiles更好的选择。然而,它也听起来像你想要得到完整的文件路径和文件名没有扩展名。下面是创建Dictionary的方法,这样就可以避免对集合进行两次循环:
var files = Directory.EnumerateFiles(@"''PathToFiles")
.ToDictionary(f => f, n => Path.GetFileNameWithoutExtension(n));
如果没有文件路径,只有文件名
string filePath = (@"D:/" + fileName);
string withoutExtension = Path.getFileNameWithoutExtension(filePath);