c# - 一旦一个或多个文件在文件夹中包含无效字符,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)
{
}
在这里,我只获取有效文件的列表,但是一旦遇到错误,它就会跳过文件夹的其余部分,而且我也无法获取包含无效字符的文件名。
解决方案
您可以使用以下代码检查路径中的无效字符
var invalidChars = Path.GetInvalidFileNameChars();
bool bInvalid = invalidChars .Any(s1 => sDir.IndexOf(s1 )!=-1);
推荐阅读
- vue.js - 在 Nuxt 中为每页选择 Vuex 模块
- ios - Xcode 12 模块 'RxSwift' 未在库演化支持下编译;使用它意味着无法保证 '' 的二进制兼容性
- c# - 如何从 C# 中的种子生成器生成随机数,随着时间的推移将继续生成相同的数字?
- c# - CancellationTokenSource 在 TaskCompletionSource 上未按预期工作
- c - 在主函数之外使用 malloc 编译错误
- javascript - 非空数组在选择其元素时返回未定义
- for-loop - Jekyll - 在前面选择带有特定键的页面
- c# - 如何在 mvc 中使用 ajax 成功函数加载数据表 td 值?
- php - 如何从foreach中排除相同的元素?
- regex - 使用 RegEx 匹配部分字符串内容?