我想制作一个C#递归文件分析程序。我还使用 Spectre 控制台来更清晰地查看我的树。我想向该程序添加更多数据,但不知何故我无法从我的目录信息中获取更多信息。
static void Main(string[] args)
{
string path= @"C:\Users\michs\Desktop\Test";
Tree tree =new Tree(path);
TraverseTree(path, tree);
AnsiConsole.Write(tree);
}
private static void TraverseTree(string path,IHasTreeNodes node)
{
DirectoryInfo dir = new DirectoryInfo(path);
var dirNode = node.AddNode(new Markup("[blue]" + dir.Name + "[/]"));
dirNode.AddNode(new Markup("Erstellt am: "+"[green]" + dir.CreationTime + "[/]" + " Letzter Zugriff:" + "[green]" + dir.LastAccessTime + "[/]" + " Zuletzt geändert:" + "[green]" + dir.LastWriteTime + "[/]"));
FileInfo[] files=dir.GetFiles();
if (files.Length>0)
{
var filesNode = dirNode.AddNode("Dateien");
foreach (FileInfo file in files)
{
filesNode.AddNode(new Markup("DateiName: " + "[yellow]" + file.FullName + "[/]" + " Letzter Zugriff:" + "[yellow]" + file.LastAccessTime + "[/]" + " Zuletzt geändert:" + "[yellow]" + file.LastWriteTime + "[/]"));
}
}
DirectoryInfo[] dirs=dir.GetDirectories();
if (dirs.Length>0)
{
foreach (DirectoryInfo dirSingle in dirs)
{
TraverseTree(dirSingle.FullName, dirNode);
}
}
}
}
如果有人遇到类似的问题,我的解决方案:
这个用于遍历函数:
DirectorySecurity dirSecurity = dir.GetAccessControl();
dirNode.AddNode(new Markup("Zugriffsrechte Typ: " + "[red]" + GetAccessRights(dirSecurity) + "[/]"));
这是 GetAccessRights 函数:
私有静态字符串 GetAccessRights(DirectorySecurity dirSecurity) { AuthorizationRuleCollection accessRules = dirSecurity.GetAccessRules(true, true, typeof(System.Security.Principal.SecurityIdentifier));
string accessInfo = "";
foreach (FileSystemAccessRule rule in accessRules)
{
accessInfo += $"Idendität: {rule.IdentityReference}, Zugriffsrechte Typ: {rule.AccessControlType}, Datei Berechtigungen: {rule.FileSystemRights}\n";
}
return accessInfo;
}