从网络获取所有文件夹

时间:2013-01-15 15:03:53

标签: c# .net network-programming

我有点迷茫,我有从网络域获取所有文件夹的任务, 例如。 (我的网络位置/整个网络/ Microsoft Windows网络/ xyNetwork)。

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

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

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

2 个答案:

答案 0 :(得分:2)

嗯,在另一个类似条目中有一个代码列出了网络中的所有计算机名称......这是您要求的第一部分。对于第二部分,我认为你需要深入研究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

VB.net程序的C#版本:

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)。

答案 1 :(得分:0)

您只需使用GetDirectories即可。例如:

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

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

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