我尝试使用名称和路径向列表框添加项目,我收到了这样的错误:
无法隐式将
string
类型转换为string[]
string path = textbox1.Text;
string[] FileName, FilePath;
DirectoryInfo directoryInfo = new DirectoryInfo(path);
FileInfo[] files = directoryInfo.GetFiles();
foreach( FileInfo fileInfo in files)
{
FileName = fileInfo.FullName; // Here
FilePath = fileInfo.Name; // and here
listbox2.Items.Add(fileInfo.FullName);
}
答案 0 :(得分:4)
您已声明:
string[] FileName, FilePath;
所以分配这个:
FileName = fileInfo.FullName; // Here
FilePath = fileInfo.Name; // and here
将字符串(例如fileInfo.FullName是字符串)分配给字符串数组。
您要做的是列出这些内容,然后定义列表并添加值:
string path = textbox1.Text;
var FileNames = new List<string>();
var FilePaths = new List<string>();
DirectoryInfo directoryInfo = new DirectoryInfo(path);
FileInfo[] files = directoryInfo.GetFiles();
foreach( FileInfo fileInfo in files) {
FileNames.Add(fileInfo.FullName); // Here
FilePaths.Add(fileInfo.Name); // and here
listbox2.Items.Add(fileInfo.FullName);
}
答案 1 :(得分:0)
您已将FileName
和FilePath
定义为string[]
。看起来你打算每个都包含单个字符串值。
string[] FileName, FilePath;
将其更改为string
string FileName, FilePath;
答案 2 :(得分:0)
string[] FileName, FilePath;
您将FileName
和FilePath
声明为数组,但FullName
和Name
都返回string
,因此错误。
FileSystemInfo.FullName Property
FileSystemInfo.Name Property
将您的声明更改为:
string FileName, FilePath;
答案 3 :(得分:0)
问题是FileName
和FilePath
被声明为string[]
,但您正在尝试为其分配string
。但是,由于您说您尝试添加包含名称和路径到列表框的文件列表,因此您根本不需要FileName
或FilePath
个变量。更容易的是设置DataSource
的{{1}}并设置要显示的对象的属性:
ListBox
然后,当到达获取所选项目时,将其强制转换为FileInfo:
listbox2.DisplayMember = "Name"; //The Name property from FileInfo
listbox2.DataSource = files;
答案 4 :(得分:0)
在单个foreach循环中简单地声明FileNames
和FilePaths
来输入List<string>
并执行Add
可能会更好,但这里有一个替代品。
string[] FileNames, FilePaths;
在两个linq操作中使用匿名函数委托。
FileNames = files.Select( f => f.FullName).ToArray();
FilePaths = files.Select( f => f.Name).ToArray();
listBox2.AddRange(files.Select(FileNames)); //AddRange can take either IEnumerable<T> or T[] as a parameter
如果您事先构建表达式,它会变得更清晰(也许更优化),因为您没有声明匿名委托函数。
// these can be declared out of function scope as readonly..
Func<FileInfo, string> SelectFullName = (f) => f.FullName;
Func<FileInfo, string> SelectName = (f) => f.Name;
FileNames = files.Select(SelectFullName).ToArray();
FilePaths = files.Select(SelectName).ToArray();
listBox2.AddRange(FileNames);
linq方法的优点是,在添加项目时,您不会通过FileNames
和FilePaths
进行枚举