C# Directory.GetDirectories 输出到字符串
C# Directory.GetDirectories Output to string
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);
}
要获取文件夹内的文件夹列表,可以使用相同的方法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);
}
}
由于目录是零层次结构,因此您需要创建一个或多个目录来创建递归方法,即调用自身直到在目录中找不到更多目录的方法。何时停止的条件是递归调用中最重要的部分...
您可以通过添加此方法来更改您的代码:
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:\"
和 ""
....
,您可以从中获得很多乐趣
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);
}
要获取文件夹内的文件夹列表,可以使用相同的方法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);
}
}
由于目录是零层次结构,因此您需要创建一个或多个目录来创建递归方法,即调用自身直到在目录中找不到更多目录的方法。何时停止的条件是递归调用中最重要的部分...
您可以通过添加此方法来更改您的代码:
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:\"
和 ""
....