0

在保存到我的计算机之前,我编写了这段代码来设置文件名:

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会丢失原始值?另外,对于同样的问题,我如何删除最终文件名之间的空格让我们说,例如“PSIQ DIGITEL”应该是“PSIQ-DIGITEL”。

编辑

如果我删除这部分+ blYear.SelectedValue == null ? "2010" : blYear.SelectedValue,那么文件名的值很好,有什么问题?

4

5 回答 5

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"

或者 ?

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

于 2013-05-06T20:12:11.913 回答
1

使用Path该类获取没有扩展名的基本文件,然后将所需的部分添加到您的文件中(并记住使用括号将条件表达式与扩展名隔离开来)

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"无法给出预期的结果

于 2013-05-06T20:15:38.103 回答
1

我建议使用 GetFileNameWithoutExtension 而不是那个拆分。if并用括号分隔最后的“.xlsx” 。

string name_file = System.IO.Path.GetFileNameWithoutExtension(openFileDialog1.FileName)
               + (blYear.SelectedValue == null ? "2010" : blYear.SelectedValue) 
               + ".xlsx"; 
于 2013-05-06T20:16:02.597 回答
1

这就是您的代码的作用:

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

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

此外,使用该Replace方法将空格变为减号。像这样:

name_file = name_file.Replace(" ", "-");
于 2013-05-06T20:16:06.720 回答
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";  

将所有内容一起运行不会给您带来任何性能优势,并且会使故障排除变得棘手。

我怀疑您会发现GetFileName(...).Split() 或 blYear.SelectedValue都不是您认为应该的那样。

恕我直言...

于 2013-05-06T20:12:14.877 回答