string[] directory = Directory.GetDirectories(path, Criteria)
使用上面的System.Diagnostics.Process.Start(directory)
我可以打开满足某些条件的多个目录 - 条件是目录中文件夹的名称。
如何获取System.Diagnostics.Process.Start(directory)
的输出并转换为字符串,而不是打开目录?
目录中打开的所有子文件夹都具有相同的文件夹结构,因此我想导航到这些目录中的特定子文件夹;我能想到的唯一方法是将System.Diagnostics.Process.Start(directory)
输出重定向到一个字符串,然后将其余的文件夹路径(例如@'\Photos'
)添加到输出字符串,然后使用System.Diagnostics.Process.Start(newPath);
在这个新的文件夹路径上。
如果有人有更好的方法,我全都耳朵。我的完整代码如下:
string path = @"C:\Projects\";
string criteria = "*" + textBox1.Text + "*";
string[] dir = Directory.GetDirectories(path, criteria);
foreach (string directory in dir)
{
System.Diagnostics.Process.Start(directory);
}
答案 0 :(得分:2)
要获取文件夹中的文件夹列表,您可以使用相同的方法Directory.GetDirectories()
string path = @"C:\Projects\";
string criteria = "*" + textBox1.Text + "*";
string[] dir = Directory.GetDirectories(path, criteria);
foreach (string directory in dir)
{
string newCriteria = "Photos";
string[] subDir = Directory.GetDirectories(directory, newCriteria);
foreach (string subDirectory in subDir)
{
System.Diagnostics.Process.Start(subDirectory);
}
}
答案 1 :(得分:0)
由于目录是零,一个或多个目录的层次结构,您需要创建一个递归方法,即在目录中找不到更多目录之前调用它的方法。停止的条件是递归调用中最重要的部分......
您可以通过添加以下方法更改代码:
public string GetDirs(string path, string criteria)
{
// store all directory names
var allDirs = new StringBuilder();
string[] dir = Directory.GetDirectories(path, criteria);
foreach (string directory in dir)
{
allDirs.AppendFormat("{0}\r\n", directory);
// recursively call GetDirs again
var subdirs = GetDirs(Path.Combine(path,directory), criteria);
// store the subdirectory names
allDirs.Append(subdirs);
}
// no more subdirs?
if (dir.Length == 0) {
// maybe show that dir?
System.Diagnostics.Process.Start(path);
}
return allDirs.ToString();
}
然后你从你的代码中调用该方法(我假设你有一个textBox2来显示GetDirs的结果):
string path = @"C:\Projects\";
string criteria = "*" + textBox1.Text + "*";
var dirs = GetDirs(path, criteria);
// assume you want to show those dirs
// add it to a textbox...
textBox2.Text = dirs;
就是这样。如果您使用GetDirs
和"C:\"
运行""
,现在就可以获得很多乐趣....