我遇到了一个大问题,好吧这就是问题所在: 我试图从目录中获取fileinfo,以便我可以在listview上列出它。 当我使用该方法递归搜索文件时:
private void Get_Files(string path)
{
DirectoryInfo di = new DirectoryInfo(path);
FileInfo[] fi = di.GetFiles();
foreach (FileInfo Info in fi)
{
try
{
Files.Add(Info.FullName);
}
catch(Exception ee)
{
MessageBox.Show(ee.Message);
}
}
foreach (DirectoryInfo DInfo in di.GetDirectories())
{
Get_Files(DInfo.FullName);
}
}
有时路径超过260个字符,所以我收到了这个错误: 路径太长,不应该超过260个字符,我在互联网上搜索,人们说它没有解决方案,但我已经找到了解决方案。 解决方案:正在创建一个字符串并将该路径的每个路径附加到该字符串,因此在将整个路径保存到字符串时,我从未得到该错误。 把它想象成将路径分开并取出每一块并将其附加到弦上。 所以这是我想到的解决方案:
List<string> Files = new List<string>();
string completepath = string.Empty;
string current_dire_name = string.Empty;
private void Get_Files(string path)
{
DirectoryInfo di = new DirectoryInfo(path);
FileInfo[] fi = di.GetFiles();
foreach (FileInfo Info in fi)
{
try
{
completepath += "\\" + Info.Name;
Files.Add(completepath);
string remove_file_name = completepath;
remove_file_name = remove_file_name.Replace("\\" + Info.Name, "");
completepath = remove_file_name;
}
catch(Exception ee)
{
if(DialogResult.Yes == MessageBox.Show("Error at the Get_Files Method and Error message :\n\n" + ee.Message + "\n\nQuit Application now ?","",MessageBoxButtons.YesNo,MessageBoxIcon.Question))
{
Environment.Exit(0);
}
}
}
foreach (DirectoryInfo DInfo in di.GetDirectories())
{
string remove_folder_name = completepath;
remove_folder_name = remove_folder_name.Replace("\\" + current_dire_name, "");
completepath = remove_folder_name;
current_dire_name = DInfo.Name;
completepath += "\\" + DInfo.Name;
Get_Files(DInfo.FullName);
}
}
好吧,那个方法救了我,但是它生成了错误的路径,我的意思是有些不正确,假设路径应该是:C:\ Folder1 \ Folder2 \ Folder3 \ file.txt 生成的路径是:C:\ Folder1 \ file.txt,类似于...... 我知道我所做的方法有些错误,尤其是递归追加。
我希望有人认同我,以便人们可以避免长路径异常。