我有一个C#4.0 .Net应用程序,它目前正在解析查找特定字符串的文本行,我想添加搜索所有目录的复选框选项,还可以按扩展名或所有文件进行过滤。
我最终在四个可能的选择中使用Directory.EnumerateFiles语句执行了几个if / else语句。
当我尝试将Enumerable分配给foreach以遍历所有这些时,我一直在上面的代码中脱离上下文时遇到错误。 我猜我需要在每个EnumerateFiles中包含所有代码if / else阻止,还是我?
我是一名VBA开发人员,正在努力跳转到C#,我发现范围和背景对我来说是最大的挑战。在VB中,我会构建一个选项串,然后连接它们(&)以获得可执行的代码行,但尝试使用(+)和字符串变量没有任何成功。
我正在谈论的if / else块如下。
try
{
string sourceDirectory =txtFolder.Text;
var filters = new[] { txtFileExt.ToString() };
var result = new List<string>();
if (txtExtensionsFile == null)
{
if (chkSubFolderFiles.Checked)
{
var txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.*", SearchOption.AllDirectories) ;
}
else
{
var txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.*", SearchOption.TopDirectoryOnly) ;
}
}
else
{
if (chkSubFolderFiles.Checked)
{
var txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.*", SearchOption.AllDirectories).Where(s => filters.Any(ext => ext == Path.GetExtension(s)))) ;
}
else
{
var txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.*", SearchOption.TopDirectoryOnly).Where(s => filters.Any(ext => ext == Path.GetExtension(s)))) ;
}
}
foreach (string filename in txtFiles)
{
using (var reader = new StreamReader(filename))
if (Path.GetExtension(filename) == txtFileExt.Text)
//continues on to parse out text from each file
}