C#一旦文件夹中的一个或多个文件包含无效字符,就会引发异常错误
我正在尝试用c#创建一个应用程序,它将列出包含某些信息的所有文件,并且将列出名称中包含无效字符或路径过长的所有文件或文件夹。 使用此代码C#一旦文件夹中的一个或多个文件包含无效字符,就会引发异常错误,c#,getfiles,C#,Getfiles,我正在尝试用c#创建一个应用程序,它将列出包含某些信息的所有文件,并且将列出名称中包含无效字符或路径过长的所有文件或文件夹。 使用此代码 private void preCheckUploadToolStripMenuItem_Click(object sender, EventArgs e) { FolderBrowserDialog selFolder = new FolderBrowserDialog(); selFolder.Description = "Select a
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);
您调用Directory.GetFiles(sDir)的sDir值是多少?我猜其中有一个无效字符。您没有关闭
try
块。。。我不确定这段代码是否真的可以编译。另外,如果您在循环中尝试/catch,在重新阅读您的问题后,只要文件中有无效字符,它就不会跳过文件夹的其余部分,就像PepitoSh所说的,不是文件包含非法字符,而是传递到目录.GetFiles(sDir)的sDir
最初sDir为FolderBrowserDialog selFolder=new FolderBrowserDialog();sDir=selFolder.SelectedPath,然后使用Directory.getdirectory我正在阅读子目录请编辑您的文章以包含该子目录。也可以设置一个断点,告诉我们调用Directory.GetFiles
时的sDir
值是多少