Я пытаюсь создать приложение на С#, в котором будут перечислены все файлы с некоторой информацией плюс будут перечислены все файлы или папки, содержащие недопустимые символы в имени или имеющие слишком длинный путь. с этим кодом
private void preCheckUploadToolStripMenuItem_Click(object sender, EventArgs e)
{
FolderBrowserDialog selFolder = new FolderBrowserDialog();
selFolder.Description = "Select a folder";
var selFolderResponse = selFolder.ShowDialog();
if (selFolderResponse != DialogResult.OK)
{
return;
}
logFile = selFolderName;
try
{
createList(selFolder.SelectedPath);
}
catch (System.Exception ex)
{
WriteLog(logFile , "error;" + ex.Message );
}
}
private void createList(string sDir)
{
try
{
var filesInDir = Directory.GetFiles(sDir);
foreach (string f in filesInDir)
{
WriteLog(logFile, "ok;" + f);
}
}
catch (ArgumentException aexc)
{
WriteLog(logFile, "error;" + aexc.Message + sDir);
}
catch (PathTooLongException pexc)
{
WriteLog(logFile", "error;" + pexc.Message + sDir);
}
finally
{
foreach (string d in Directory.EnumerateDirectories(sDir))
try
{
Application.DoEvents();
createList(d);
}
catch (System.Exception excpt)
{
WriteLog(logFile, "error;" + excpt.Message + ";the whole folder will be skipped;" + sDir);
}
}
}
в Directory.GetFiles(sDir)
я получаю ошибку ArgumentException
с недопустимыми символами в пути и пропускаю всю папку. Я не могу перечислить файлы, содержащие недопустимые символы. я тоже пробовал
try
{
foreach (string f in Directory.EnumerateFiles(sDir))
{
WriteLog(logFile, "ok;" + f);
}
catch( exception)
{
}
Здесь я получаю список только до действительных файлов, но как только он сталкивается с ошибкой, он пропускает остальную часть папки, и я также не могу получить имя файла, содержащее недопустимые символы.
try
... Я не уверен, что этот код действительно может скомпилироваться. Кроме того, возможно, если выtry/catch
внутри цикла, он не будет пропускать остальную часть папки всякий раз, когда в файле есть недопустимый символ. - person Rafalon   schedule 29.05.2018sDir
, которые вы передаетеDirectory.GetFiles(sDir)
- person Rafalon   schedule 29.05.2018sDir
в момент вызоваDirectory.GetFiles
- person Rafalon   schedule 29.05.2018