У меня возникла большая проблема, так вот проблема: Я пытаюсь получить файл из каталога, чтобы я мог его перечислить в 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 символов, поэтому я получаю эту ошибку: Path слишком долго, и она не должна превышать 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, что-то вроде этого .... Я знаю, что метод, который я сделал, имеет что-то неправильное, особенно рекурсивное добавление.
Надеюсь, что кто-то рисует это со мной, чтобы люди могли избежать исключения на длинные пути.
Это потому, что ваш метод неправильный и не поможет. – SLaks
Метод имеет что-то неправильное, я знаю, это то, что я хочу выяснить, может быть, если кто-то поделился лучшим алгоритмом, который тоже помог бы –
Нет такого обходного пути. 'Get *()' будет терпеть неудачу в строке> 260 символов, независимо от того, как вы построите строку. – SLaks