我的程序所做的基本上是将文件名(包括它的扩展名)从目录列入列表框。然后它有一个排序函数,它将列表字符串按字母顺序排序。
最后它有一个二进制搜索功能,允许用户输入程序将比较的任何字符串,并将匹配的结果显示在列表框中。
现在,所有这些功能都可以正常运行,但是我无法在搜索后删除文件名的扩展名。
例如,在扫描和排序部分,它将文件名列为: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");
}
答案 0 :(得分:5)
C#非常简单,如果内容超过2分钟,框架中there probably is a method for it。
答案 1 :(得分:3)
尝试下面的迭代会帮助你......
listBox1.Items.Add(Path.GetFileNameWithoutExtension(list1[n]));
答案 2 :(得分:2)
Substring
方法返回一个新的字符串副本,从源代码复制。如果你想“切断扩展”,那么你必须获取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);
但是,其次,还有更好的方法:System.IO.Path
类为您提供了一组编写良好的静态方法,例如,删除扩展名(编辑:这是L-Three建议的在评论中),完整处理点等:
var str = System.IO.Path.GetFileNameWithoutExtension("myfile.txt"); // == "myfile"
请参阅MSDN link
它仍然会返回一个副本,你仍然需要将结果存储在某个地方!
list1[n] = Path.GetFileNameWithoutExtension( list1[n] );
答案 3 :(得分:2)
答案 4 :(得分:2)
使用Path.GetFileNameWithoutExtension方法。我觉得很容易。
http://msdn.microsoft.com/en-us/library/system.io.path.getfilenamewithoutextension.aspx
答案 5 :(得分:1)
不确定您是如何实现目录搜索的,但是在这些情况下您可以利用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));
答案 6 :(得分:0)
如果没有文件路径,只有文件名,则可以执行此操作
string filePath = (@"D:/" + fileName);
string withoutExtension = Path.getFileNameWithoutExtension(filePath);