为什么我只得到“.xlsx”而不是完整的连接字符串

时间:2013-05-06 20:09:20

标签: c# .net

在保存到我的电脑之前,我写了这段代码来设置文件名:

string name_file = System.IO.Path.GetFileName(openFileDialog1.FileName).Split('.')[0]
                   + blYear.SelectedValue == null ? "2010" : blYear.SelectedValue 
                   + ".xlsx"; 

我跟踪代码并查看结果:

System.IO.Path.GetFileName(openFileDialog1.FileName).Split('.')[0]  "PSIQ DIGITEL"  string
blYear.SelectedValue                                                null            object
name_file                                                           ".xlsx"         string

我做错了什么?为什么name_file丢失了原始值?另外,对于同样的问题,我如何删除最终file_name之间的空格,比如示例中的“PSIQ DIGITEL”应为“PSIQ-DIGITEL”。

编辑

如果我删除此部分+ blYear.SelectedValue == null ? "2010" : blYear.SelectedValue,那么文件名的值是正确的,那有什么不对?

5 个答案:

答案 0 :(得分:6)

你的意思是

((System.IO.Path.GetFileName(openFileDialog1.FileName).Split('.')[0] + blYear.SelectedValue) == null ? "2010" : blYear.SelectedValue) + ".xlsx"

(System.IO.Path.GetFileName(openFileDialog1.FileName).Split('.')[0] + blYear.SelectedValue) == null ? "2010" : (blYear.SelectedValue + ".xlsx")

System.IO.Path.GetFileName(openFileDialog1.FileName).Split('.')[0] + (blYear.SelectedValue == null ? "2010" : blYear.SelectedValue) + ".xlsx"

或?

使用括号告诉编译器你的意思,它不关注换行和缩进。

答案 1 :(得分:1)

使用Path类获取base file without extension,然后将所需的部分添加到文件中(并记住使用parenthesys将条件表达式与扩展名隔离)

string base_file = System.IO.Path.GetFileNameWithoutExtension(openFileDialog1.FileName);
string name_file = base_file + 
                   (blYear.SelectedValue == null ? "2010" : blYear.SelectedValue.ToString()) +
                   ".xlsx"; 

嗯,我认为通过这种方式,它更具可读性。

顺便说一句,使用Split然后在名为"test.my.file.name.csv"的文件名中获取结果数组中的第一个元素无法给出预期的结果

答案 2 :(得分:1)

我建议使用GetFileNameWithoutExtension而不是分割。 并将最终的“.xlsx”分隔为if和括号。

string name_file = System.IO.Path.GetFileNameWithoutExtension(openFileDialog1.FileName)
               + (blYear.SelectedValue == null ? "2010" : blYear.SelectedValue) 
               + ".xlsx"; 

答案 3 :(得分:1)

这就是您的代码所做的事情:

string a = (System.IO.Path.GetFileName(openFileDialog1.FileName).Split('.')[0]
    + blYear.SelectedValue) == null ? "2010" : blYear.SelectedValue; 
string name_file = a + ".xlsx";

因此,如果文件名完全填满,您将使用选定的值blYear,它可能为空。提示:使用带有字符串连接的?运算符时,始终使用括号。它会让你保持理智。

另外,使用Replace方法将空格更改为minuses。像这样:

name_file = name_file.Replace(" ", "-");

答案 4 :(得分:0)

您应该将表达式分解为三个单独的语句,并在MSVS调试器中跟踪它们:

  String nameFile;
  nameFile = System.IO.Path.GetFileName(openFileDialog1.FileName).Split('.')[0];
  nameFile += blYear.SelectedValue == null ? "2010" : blYear.SelectedValue;
  nameFile += ".xlsx";  

...或者,更好......

  String nameFile;
  nameFile = System.IO.Path.GetFileName(openFileDialog1.FileName);
  nameFile = nameFile.Split('.')[0];
  nameFile += ((blYear.SelectedValue == null) ? "2010" : blYear.SelectedValue);
  nameFile += ".xlsx";  

将所有内容组合在一起可以为您带来 no 性能优势,并且可以解决问题。

我怀疑你会发现既不是 GetFileName(...)。您认为它们应该是Split()或blYear.SelectedValue。

... IMHO