2013-12-18 42 views
2

我正在关注互联网上的教程,我稍微更改了我的目的代码,现在它不工作。我选择使用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); 
} 
+2

'Path.GetFileNameWithoutExtension()' – SLaks

回答

12

,它总是返回Form1上,而不是文件名,有什么做错了吗?

分裂在filename()方法的字符串text参数,但最有可能的FormText财产(,C#语言是case-sensitiveTexttext是完全地2个不同的东西):

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

所以将其更改为:

string s = text; 

此外,由其他人则建议,可以使用Path.GetFileNameWithoutExtension()方法,很容易为你提供这种期望的逻辑:

var result = Path.GetFileNameWithoutExtension(fileName); 
+0

谢谢你的所有 – user2751773

6

你的方法参数被称为text但你拆你Text查找。 C#区分大小写,因此Text必须是您的表单上的一个属性...

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

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

+0

: - )............. –

1

你不需要手动解析它。你有办法做到这一点:

string file = Path.GetFileNameWithoutExtension(text); 
0

C#区分大小写,文本和文本引用不同的值。在这种情况下,你应该更换:

string s = Text; 

通过

string s = text; 

“文本” 传递给函数名参数。