string[] files = Directory.GetFiles(ofd.SelectedPath);
System.IO.Path.GetFileNameWithoutExtension(files);
所以,我收到一条错误消息:
无法从'string []'转换为'string'
有什么办法可以解决这个问题?
答案 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();
或简单地遍历文件并获取文件名(使用for
,foreach
或您希望使用的任何其他循环):
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));