【发布时间】:2018-05-29 07:04:33
【问题描述】:
我正在尝试在 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)
{
}
在这里,我只获取有效文件之前的列表,但一旦遇到错误,它就会跳过文件夹的其余部分,而且我也无法获取包含无效字符的文件名。
【问题讨论】:
-
您调用 Directory.GetFiles(sDir) 的 sDir 值是多少?我猜它里面有一个无效字符。
-
你没有关闭你的
try块......我不确定这段代码是否可以实际编译。另外,也许如果你try/catchinside 循环,只要文件中有无效字符,它就不会跳过文件夹的其余部分 -
重新阅读您的问题后,似乎正如 PepitoSh 所说,它 not files 包含非法字符,而是
sDir你正在传递给Directory.GetFiles(sDir) -
最初 sDir 是 FolderBrowserDialog selFolder = new FolderBrowserDialog(); sDir = selFolder.SelectedPath 然后使用 Directory.getdirectory 我正在读取子目录
-
请编辑您的帖子以包含该内容。也可以设置一个断点并告诉我们在调用
Directory.GetFiles时sDir的值是什么