无法从“字符串[]”转换为“字符串”

时间:2018-11-03 11:51:51

标签: c# .net string

string[] files = Directory.GetFiles(ofd.SelectedPath);
System.IO.Path.GetFileNameWithoutExtension(files);

所以,我收到一条错误消息:

  

无法从'string []'转换为'string'

有什么办法可以解决这个问题?

4 个答案:

答案 0 :(得分:3)

Path.GetFileNameWithoutExtension Method 接受一个参数-string path,它是文件的路径(它是string而不是string[])。

为了获得该目录中的所有文件名,请编写如下内容:

string[] files = Directory.GetFiles(ofd.SelectedPath);
string[] fileNames = files.Select(f => System.IO.Path.GetFileNameWithoutExtension(f)).ToArray();
//or just
//string[] fileNames = files.Select(System.IO.Path.GetFileNameWithoutExtension).ToArray();

或简单地遍历文件并获取文件名(使用forforeach或您希望使用的任何其他循环):

string[] files = Directory.GetFiles(ofd.SelectedPath);

List<string> fileNames = new List<string>();
foreach(string file in files)
{
    fileNames.Add(System.IO.Path.GetFileNameWithoutExtension(file));
}

参考: Path.GetFileNameWithoutExtension Method foreach, in (C# reference) Enumerable.Select Method

答案 1 :(得分:2)

files是字符串的数组,而GetFileNameWithoutExtension接受字符串类型的参数。您需要通过forach或使用LINQ遍历文件,如下所示:

var result = files.Select(System.IO.Path.GetFileNameWithoutExtension);

或者:

string[] result = files.Select(System.IO.Path.GetFileNameWithoutExtension).ToArray();

只需确保已将using System.Linq;添加到using指令中即可。

答案 2 :(得分:1)

根据该GetFileNameWithoutExtension function doc,它需要一个类型为string的参数,但是您正在向该方法传递string[]

如果您希望该数组仅包含一个元素,则可以这种方式调用该函数。

string fileName = System.IO.Path.GetFileNameWithoutExtension(files[0]);

答案 3 :(得分:1)

System.IO.Path.GetFileNameWithoutExtension(files)期望string而不是字符串数组(string[])。

如果要从files数组中的所有文件名中删除扩展名,则可以使用LINQ:

string[] files = Directory.GetFiles(ofd.SelectedPath);
var filesWithoutExtension = files.Select(f => 
       System.IO.Path.GetFileNameWithoutExtension(f));