C# 变量中的C SearchOption.AllDirectories
我正在尝试使用选项SearchOption.AllDirectories有条件地从某个目录获取所有文件的列表。若选中“我的表单”中的复选框,则结果还将包含子目录中的文件。如果未选中复选框,将忽略子文件夹。所以我的想法是创建一个变量,该变量可以包含适当的代码字符串ptn=,SearchOption.AllDirectories;。但我还是犯了同样的错误 mscorlib.dll中发生类型为“System.ArgumentException”的未处理异常,并包含其他信息:路径包含无效字符。 以下是我的部分代码:C# 变量中的C SearchOption.AllDirectories,c#,wpf,C#,Wpf,我正在尝试使用选项SearchOption.AllDirectories有条件地从某个目录获取所有文件的列表。若选中“我的表单”中的复选框,则结果还将包含子目录中的文件。如果未选中复选框,将忽略子文件夹。所以我的想法是创建一个变量,该变量可以包含适当的代码字符串ptn=,SearchOption.AllDirectories;。但我还是犯了同样的错误 mscorlib.dll中发生类型为“System.ArgumentException”的未处理异常,并包含其他信息:路径包含无效字符。 以下是我
private void Button_Click(object sender, RoutedEventArgs e)
{
FolderBrowserDialog folderDlg = new FolderBrowserDialog();
folderDlg.ShowNewFolderButton = true;
// Show the FolderBrowserDialog.
DialogResult result = folderDlg.ShowDialog();
txtBx1.Text = folderDlg.SelectedPath;
Environment.SpecialFolder root = folderDlg.RootFolder;
//declaration and initialization of string variable
string ptn = "";
string flTp = @folderDlg.SelectedPath;
//show string in texblock
textBlock.Text = flTp;
try {
if(subfldr.IsChecked ?? true) {
ptn = ",SearchOption.AllDirectories";
//show message in textblock
txtBlck.Text = "Subfolders are checked";
}
string[] fileArray = Directory.GetFiles(flTp,"*.txt"+ptn );
...
}
catch (IOException ex)
{
System.Windows.Forms.MessageBox.Show("Error: " + ex.Message);
}
程序正常启动。但在选择目录之后,什么也没有发生。希望有人能指出我做错了什么。
提前谢谢。试试这样的方法:
string[] fileArray = Directory.GetFiles(flTp,"*.txt", subfldr.IsChecked ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly);
这将使用条件运算符选择要使用的选项。你可以把它分成几行,以便更好地理解它:
SearchOption option = subfldr.IsChecked ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly;
string[] fileArray = Directory.GetFiles(flTp,"*.txt", option);
您可以将模式声明为字符串类型。在大多数情况下,这是正确的。但是,您正在尝试使用System.IO中的Search选项。此特定类型不是字符串,而是枚举。这就是为什么你会遇到错误,你的接收
您应该声明一个枚举,而不是复杂的逻辑、三元或非表达式代码。你可以找到这些信息
实际上,您可以调用两个不同的调用:
SearchOption.AllDirectories
SearchOption.TopDirectoryOnly
我建议,仅仅是因为你做了大量的逻辑来决定它应该做什么。否则,您可以选择将字符串转换为枚举或声明一个枚举,以以下内容开头:
SearchOption pattern = SearchOption.AllDirectories;
SearchOption pattern = SearchOption.TopDirectoryOnly;
该代码已经过测试,可以正常工作。请从System.IO调用该代码。如果可以,你应该可以这样申报。然后您的代码:
// Left out first parameters to clarify:
SearchOption pattern = SearchOption.AllDirectories;
var contents = Directory.GetFiles("...", "...", pattern);
我相信这就是你想要实现的
// Example:
var pattern = SearchOption.TopDirectoryOnly;
if(chkSubFolder.IsChecked)
pattern = SearchOption.AllDirectories;
var files = Directory.GetFiles("Your Path", "Your Filter", pattern);
这是因为SearchOption不是字符串类型。它实际上是一个枚举。否则,您需要将ptn声明为枚举而不是字符串。要转换,请查看:它与subfldr一起工作。IsChecked==true?SearchOption.AllDirectory:SearchOption.TopDirectoryOnly。谢谢