我试图用C#编写一个命令行实用程序,该实用程序有点类似于Linux的“ du”命令。理想情况下,此实用程序将通过一个或多个路径作为参数。
假设目录c:\ project有名为0000到9999的子目录,并且每个目录都有子目录,例如测量,工程,地下,建筑。
例如: utlity.exe f:\ 5 * f:\ 6 * \ 01 5?780 \ 48 *
更新---
这是我要编写的用于扩展路径的函数示例:
public static string[] ExpandFilePaths(string[] @args)
{
var dirList = new List<string>();
string[] myPath;
foreach (string path in args)
{
int lastSlashPosition;
int firstWildcardPosition = -1;
int firstSplatPosition = path.IndexOf("*");
int firstQuestionPosition = path.IndexOf("?");
// Do we have a wildcard?
if (firstSplatPosition > -1 && firstQuestionPosition > -1)
{
if (firstSplatPosition < firstQuestionPosition)
{
firstWildcardPosition = firstSplatPosition;
}
else
{
firstWildcardPosition = firstQuestionPosition;
}
string prewildcard = path.Substring(0, firstWildcardPosition);
lastSlashPosition = prewildcard.LastIndexOf("\\");
}
else if (firstSplatPosition > -1 && firstQuestionPosition == -1)
{
firstWildcardPosition = firstSplatPosition;
string prewildcard = path.Substring(0, firstWildcardPosition);
lastSlashPosition = prewildcard.LastIndexOf("\\");
}
else if (firstSplatPosition == -1 && firstQuestionPosition > -1)
{
firstWildcardPosition = firstQuestionPosition;
string prewildcard = path.Substring(0, firstWildcardPosition);
lastSlashPosition = prewildcard.LastIndexOf("\\");
}
else
{
lastSlashPosition = path.LastIndexOf("\\");
}
if (lastSlashPosition == -1)
{
myPath = Directory.GetDirectories(".\\", path);
}
else
{
string pathPart = path.Substring(0, lastSlashPosition + 1);
string dirPart = path.Substring(lastSlashPosition + 1);
myPath = Directory.GetDirectories(pathPart, dirPart);
}
foreach (string item in myPath)
{
dirList.Add(item);
}
}
return dirList.ToArray();
}
}
当路径具有多个通配符(例如f:\ 8 * \ 01 *)时,我一直遇到Directory.GetDirectories()的问题。
我感觉就像是一只松鼠在树上奔跑,以为必须有更好的方法?
任何帮助将不胜感激。这不是学校的作业,而是我将在工作中用来自学C#的工具。