C# 网络驱动器列表

C# 网络驱动器列表,c#,asp.net,C#,Asp.net,我正在使用一个很好的示例来获取驱动器列表。它似乎在工作,但我很确定我有一个逻辑错误,因为它只列出了我最后一个“本地”和最后一个“网络”驱动器。如果有人能提出建议,那就太好了 这是我的密码: protected void Page_Load(object sender, EventArgs e) { DriveInfo[] drives = DriveInfo.GetDrives(); foreach (DriveInfo drive in drives) {

我正在使用一个很好的示例来获取驱动器列表。它似乎在工作,但我很确定我有一个逻辑错误,因为它只列出了我最后一个“本地”和最后一个“网络”驱动器。如果有人能提出建议,那就太好了

这是我的密码:

protected void Page_Load(object sender, EventArgs e)
{
    DriveInfo[] drives = DriveInfo.GetDrives();
    foreach (DriveInfo drive in drives)
    {
        bool isLocal = IsLocalDrive(drive.Name);
        if (isLocal)
        {
            loc = drive.Name;
        }
        else
        {
            net = drive.Name;
        }            
    }

    local = loc + " ~ ";
    network = net + " ~ ";
}

这只会产生:

本地驱动器:D:\~

网络驱动器:Z:\~

鉴于我预期:

本地驱动器:A:\~C:\~D:\~


网络驱动器:H:\~I:\~J:\~p:\~U:\~V:\~W:\~X:\~Z:\~

您只能看到最后一个字母,因为您在
foreach
循环的每次迭代中都会完全覆盖字符串。相反,您应该将以下内容附加到值:

local += string.Format("{0} ~ ", loc);
network += string.Format("{0} ~ ", net);

您只能看到最后一个字母,因为在
foreach
循环的每次迭代中都会完全覆盖字符串。相反,您应该将以下内容附加到值:

local += string.Format("{0} ~ ", loc);
network += string.Format("{0} ~ ", net);

你眼前的问题是

改用这个:

 loc += drive.Name + " ";

 net += drive.Name + " ";
建议:

使用StringBuilder创建字符串

            StringBuilder localSB = new StringBuilder();
            StringBuilder netSB = new StringBuilder();

            DriveInfo[] drives = DriveInfo.GetDrives();
            foreach (DriveInfo drive in drives)
            {
                string loc = string.Empty;
                string net = string.Empty;

                bool isLocal = IsLocalDrive(drive.Name);
                if (isLocal)
                {
                    loc = drive.Name;

                }
                else
                {
                    net = drive.Name;

                }

                if (!String.IsNullOrEmpty(loc))
                {
                    localSB.Append(string.Format("{0} ~ ", loc));
                }
                if (!String.IsNullOrEmpty(net))
                {
                    netSB.Append(string.Format("{0} ~ ", net));
                }
            }

            string localFinal = localSB.ToString();
            string netFinal = netSB.ToString();

你眼前的问题是

改用这个:

 loc += drive.Name + " ";

 net += drive.Name + " ";
建议:

使用StringBuilder创建字符串

            StringBuilder localSB = new StringBuilder();
            StringBuilder netSB = new StringBuilder();

            DriveInfo[] drives = DriveInfo.GetDrives();
            foreach (DriveInfo drive in drives)
            {
                string loc = string.Empty;
                string net = string.Empty;

                bool isLocal = IsLocalDrive(drive.Name);
                if (isLocal)
                {
                    loc = drive.Name;

                }
                else
                {
                    net = drive.Name;

                }

                if (!String.IsNullOrEmpty(loc))
                {
                    localSB.Append(string.Format("{0} ~ ", loc));
                }
                if (!String.IsNullOrEmpty(net))
                {
                    netSB.Append(string.Format("{0} ~ ", net));
                }
            }

            string localFinal = localSB.ToString();
            string netFinal = netSB.ToString();

谢谢,我知道一定是这样的。我只是没有看到它。当你把信息积累到字符串中时,也要考虑使用String Bu建器。谢谢,我知道它必须是这样的。我只是没有看到它。当你把信息积累到字符串中时,也要考虑使用String Bu建器。我已经编辑了你的标题。请参阅“”,其中的共识是“不,他们不应该”。您知道这只会使驱动器位于服务器上,而不是客户端的机器上,对吗?只要这是您想要的就可以了,但是您标记了ASP.Net,所以我假设有人通过web访问您的服务器。不确定知道哪些本地服务器驱动器可用对访问者有什么作用……@JohnSaunders谢谢,我会记住这一点。@MichaelTodd我当时一定误解了这个示例。我将继续研究,因为最终结果将是用户有一个地方保存他们的数据,但只有他们的网络驱动器(而不是本地驱动器)应该被选择,这样整个“团队”都可以访问。@MichaelTodd的意思是,你将永远无法通过使用web应用程序获得客户端计算机上的驱动器列表。那将是一个严重的安全漏洞。我已经编辑了你的标题。请参阅“”,其中的共识是“不,他们不应该”。您知道这只会使驱动器位于服务器上,而不是客户端的机器上,对吗?只要这是您想要的就可以了,但是您标记了ASP.Net,所以我假设有人通过web访问您的服务器。不确定知道哪些本地服务器驱动器可用对访问者有什么作用……@JohnSaunders谢谢,我会记住这一点。@MichaelTodd我当时一定误解了这个示例。我将继续研究,因为最终结果将是用户有一个地方保存他们的数据,但只有他们的网络驱动器(而不是本地驱动器)应该被选择,这样整个“团队”都可以访问。@MichaelTodd的意思是,你将永远无法通过使用web应用程序获得客户端计算机上的驱动器列表。这将是一个严重的安全漏洞。