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应用程序获得客户端计算机上的驱动器列表。这将是一个严重的安全漏洞。