C # выдает ошибку исключения, как только один или несколько файлов содержат недопустимые символы в папке - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь создать приложение на c #, которое будет перечислять все файлы с плюсом некоторой информации, будет перечислять все файлы или папки, содержащие недопустимые символы в имени или имеющие слишком длинный путь.с этим кодом

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)
    {
    }

Здесь я получаю список только до действительных файлов, но, когда он сталкивается с ошибкой, он пропускает оставшуюся часть папки, и я также не могу получить имя файла, содержащее недопустимые символы.

1 Ответ

0 голосов
/ 29 мая 2018

Вы можете использовать приведенный ниже код, чтобы проверить наличие недопустимых символов в пути

 var invalidChars = Path.GetInvalidFileNameChars();
        bool bInvalid = invalidChars .Any(s1 => sDir.IndexOf(s1 )!=-1);
...