我正在关注互联网上的教程,为了我的目的,我稍微改变了代码,现在它无法正常工作。我使用OpenFileDialog
选择了一个路径,然后尝试通过反斜杠(如下面的
C:\的Inetpub \日志\ LogFiles文件\ W3SVC1
它总是返回form1
而不是文件名,出错了什么?
string filename(string text)
{
string s = Text;
string[] arr = s.Split('\\');
string[] dot = arr[arr.Length - 1].Split('.');
return dot[0];
}
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.ShowDialog();
textBox1.Text = ofd.FileName;
label1.Text = filename(textBox1.Text);
}
答案 0 :(得分:12)
它总是返回form1而不是文件名,出错了什么?
您不在text
方法中拆分字符串filename()
参数,但很可能是您Text
的{{1}}属性(注意,C#case-sensitive,Form
和Text
完全相同,只有两件事:
text
所以改成它:
string filename(string text)
{
string s = Text;
string[] arr = s.Split('\\');
...
此外,正如其他人所建议的那样,您可以使用Path.GetFileNameWithoutExtension()
方法轻松地为您提供所需的逻辑:
string s = text;
答案 1 :(得分:6)
您的方法参数名为text
,但您可以将Text
中找到的内容拆分。 C#区分大小写,因此Text
必须是表单上的属性...
顺便说一句,您可以使用LINQ使代码更具可读性。例如,您可以将arr[arr.Length - 1]
替换为arr.Last()
。不是你要求的,而是奖金提示。
编辑 Yair关于System.IO.Path.GetFileNameWithoutExtension()
的评论当然是正确的。甚至比自己拆分并使用LINQ获取零件更好。
答案 2 :(得分:1)
您无需手动解析它。你有办法做到这一点:
string file = Path.GetFileNameWithoutExtension(text);
答案 3 :(得分:0)
C#区分大小写,text和Text指的是不同的值。在这种情况下,您应该替换:
string s = Text;
通过
string s = text;
“text”是传递给文件名函数的参数。