我正在尝试在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)
{
}
这里我只获取列表,直到有效文件,但一旦遇到错误,它正在跳过文件夹的其余部分,我也无法获得包含无效字符的文件名。
答案 0 :(得分:0)
您可以使用以下代码检查路径中的无效字符
var invalidChars = Path.GetInvalidFileNameChars();
bool bInvalid = invalidChars .Any(s1 => sDir.IndexOf(s1 )!=-1);