繁体   English   中英

对反斜杠的分裂感到困惑

[英]confused about split by backslash

我正在关注互联网上的教程,为了我的目的,我稍微改变了代码,现在它无法正常工作。 我使用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);
}

并且它总是返回form1而不是文件名,出错了什么?

没有filename()方法中拆分字符串text参数,但很可能是你的FormText属性( 注意 C#是区分大小写的Texttext完全是2个不同的东西):

string filename(string text)
{
    string s = Text;
    string[] arr = s.Split('\\');
    ...

所以改成它:

string s = text;

此外,正如其他人所建议的那样,您可以使用Path.GetFileNameWithoutExtension()方法,它可以轻松地为您提供所需的逻辑:

var result = Path.GetFileNameWithoutExtension(fileName);

您的方法参数称为text但您可以拆分在Text找到的内容。 C#区分大小写,因此Text必须是表单上的属性...

顺便说一句,您可以使用LINQ使您的代码更具可读性。 例如,您可以用arr.Last()替换arr[arr.Length - 1] 不是你要求的,而是奖金提示。

编辑 Yair关于System.IO.Path.GetFileNameWithoutExtension()的评论当然是正确的。 甚至比自己拆分并使用LINQ获取零件更好。

您无需手动解析它。 你有一个方法来做到这一点:

string file = Path.GetFileNameWithoutExtension(text);

C#区分大小写,text和Text指的是不同的值。 在这种情况下,您应该替换:

string s = Text;

通过

string s = text;

“text”是传递给文件名函数的参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM