使用C#的SMB目录列表

时间:2010-09-08 08:35:07

标签: c#

我正在尝试创建SMB网络服务器的远程目录列表。

然而,我的方法不起作用。对DirectoryInfo()的调用抱怨我不能用URi格式给它一个字符串。

这就是我的想法:

string smbDirectory = @"\\SERVER\MYSHARE";
Uri requestURI = new Uri(smbDirectory);
List<FileInfo> files = this.listAllFilesInWebDirectory(requestURI);

List<FileInfo> listAllFilesInWebDirectory(Uri smbDirectory)
{
    string filePattern = "*";
    List<FileInfo> returnable = null;
    DirectoryInfo directory = new DirectoryInfo(smbDirectory.AbsoluteUri);

    if (directory.Exists == true)
    {
        FileInfo[] files = directory.GetFiles(filePattern);
        returnable = new List<FileInfo>(files);
    }
    return returnable;
}

当我致电directory.GetFiles(filePattern)时,我一直收到异常。

2 个答案:

答案 0 :(得分:0)

在我看来,DirectoryInfo class只接受本地和UNC文件路径,而不是像http:// ...

这样的网址

答案 1 :(得分:0)

正如ewall所说,你不能使用uri。

为了做到这一点,摆脱Uri,而是将smbDirectory字符串传递给listallfiles函数。

但鉴于此问题的编辑历史可能无法解决实际问题。

-
如果要枚举Web服务器的目录结构,那么您将不得不在Web服务器本身上实现某些功能以支持此功能。对于MS服务器,“简单”的方法是安装webdav并利用它的api来做你想要的。但是,您可以在服务器上轻松实现自己的Web服务,并以此方式查询。

另一种方法是配置Web服务器以允许目录浏览。确保您没有默认文档集。配置完成后,您可以使用标准的HttpRequest类对服务器进行http调用并解析结果。

第三条路线是安装FTP服务器,只需通过FTP运行命令。


重点是DirectoryInfo类不适用于您想要的内容。


我不相信上述任何一个都是你想要的,或者你提出了一些关于silverlight和文件访问的其他问题。也许您可以准确说明您希望应用程序执行的操作以及您尝试解决的问题。这里有很多人可以指导你走正确的道路。