【问题标题】:Get all folders from network从网络获取所有文件夹
【发布时间】:2013-01-15 15:03:53
【问题描述】:

我有点迷路了,我的任务是从网络域中获取所有文件夹, 例如。 (网上邻居/整个网络/Microsoft Windows 网络/xyNetwork)。

我必须获取所有文件夹和子文件夹,然后获取分配给该文件夹的所有安全组以及授予每个安全组的权限。

我之前做过的第二部分,但是,获取所有文件夹列表的第一部分似乎非常复杂。

任何可能有帮助的指南或参考资料?

【问题讨论】:

标签: c# .net network-programming


【解决方案1】:

嗯,在另一个类似条目中有一个代码列出了网络中的所有计算机名称...这是您要求的第一部分。对于第二部分,我认为您需要深入研究System.DirectoryServices 类,因为还有一些权限...祝您好运。

//Lists all available computer names on the network.
public static List<String> ListNetworkComputers()
{
    var computerNames = new List<String>();
    var computerSchema = "Computer";

    var entries = new System.DirectoryServices.DirectoryEntry("WinNT:");
    foreach (var domains in entries.Children)
    {
        foreach (var computer in domains.Children)
        {
            if (computer.SchemaClassName.ToLower().Contains(computerSchema .ToLower()))
            {
                computerNames.Add(computer.Name);
            }
        }
    }

    return computerNames;
}

我刚刚打印出这些值,它对我来说效果很好。

foreach (string lst in ListNetworkComputers())
{
    Console.WriteLine("PC: " + lst);
}

(以上代码取自:Getting computer names from my network places

您需要从您的代码中访问 Win32_Share WMI。 添加对 System.Management.dll 的引用并使用以下代码。

此处主题的 VB.NET 中的代码示例: http://www.pcreview.co.uk/forums/finding-share-s-directory-spec-t3064222.html

C#版本的VB.net程序:

class Program
{
    static void Main(string[] args)
    {
        var objClass = new System.Management.ManagementClass("Win32_Share");

        foreach(var objShare in objClass.GetInstances())
        {
            Console.WriteLine(String.Format("{0} -> {1}", 
                objShare.Properties["Name"].Value, objShare.Properties["Path"].Value));
        }
    }
}

您可以将上面代码的结果与在 windows 命令提示符下运行以下命令得到的结果进行比较:

C:\net share

这将为您提供共享名称(共享时给出的共享名称,即 MySharedDir)和资源(Windows 路径,即 C:\myshareddir)。

【讨论】:

  • 看来我没有说清楚。我想要的是以下内容。打开我的网络位置,然后是 microsoft windows 网络,然后你应该会看到很多网络域,选择其中一个包含数千台 PC、服务器 .. 等(然后对于每个我想要获取文件夹和子文件夹列表)
  • @Maro - Active Directory 问题的链接怎么样?这能回答你的问题吗?
  • @Maro,不客气。将所有计算机接入网络的广播本质上是耗时的......为什么不添加“这将需要一些时间。请稍候。”消息和滚动条?呵呵
  • 它不是用户用来显示消息的应用程序,它是一个每天晚上运行以从公司所有服务器获取数据的应用程序
【解决方案2】:

您可以简单地使用GetDirectories。例如:

var folders = Directory.GetDirectories(@"\\server\share");

要获取所有目录(即包含子目录),请使用以下命令:

var folders = Directory.GetDirectories(@"\\server\share", "*", SearchOption.AllDirectories));

【讨论】:

  • 不是从服务器获取目录,而是获取网络中的所有工作站,然后获取这些工作站的所有目录
猜你喜欢
  • 1970-01-01
  • 2012-06-08
  • 1970-01-01
  • 1970-01-01
  • 2020-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-27
相关资源
最近更新 更多