在保存到我的电脑之前,我写了这段代码来设置文件名:
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
,那么文件名的值是正确的,那有什么不对?
答案 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