首页 > 解决方案 > 一旦一个或多个文件在文件夹中包含无效字符,C#就会抛出异常错误

问题描述

我正在尝试在 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)
    {
    }

在这里,我只获取有效文件的列表,但是一旦遇到错误,它就会跳过文件夹的其余部分,而且我也无法获取包含无效字符的文件名。

标签: c#getfiles

解决方案


您可以使用以下代码检查路径中的无效字符

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

推荐阅读