2013-10-22 60 views
0

我正在使用一個出色的示例here來獲取我的驅動器列表。它似乎工作,但我敢肯定,我有一個邏輯錯誤,因爲它只列出我最後的「本地」和我的最後一個「網絡」驅動器。如果任何人都可以提出建議,那會很棒。聯網驅動器列表

這裏是我的代碼:

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 + " ~ "; 
} 

protected void Button1_Click(object sender, EventArgs e) 
    { 
     Label1.Text = "Local drives: " + local; 
     Label2.Text = "Network drives: " + network; 
    } 

這不僅產生:

本地驅動器:d:\〜

網絡驅動器:Z:\〜

儘管我曾預計:

本地驅動器A:\〜C:\〜d:\〜

網絡驅動器:H:\〜I:\〜j:\〜p:\〜U: \〜V:\〜W:\〜X:\〜Z:\〜

+1

我編輯了您的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

+0

你知道這只是讓驅動器位於服務器上,而不是客戶機上,對吧?這很好,只要這就是你想要的,但你標記了ASP.Net,所以我假設有人正在通過網絡訪問你的服務器。不知道什麼知道本地服務器驅動器是可用的訪問.... –

+0

@JohnSaunders謝謝,我會牢記這一點。 – Nallware

回答

3

您只看到最後一個字母,因爲您在foreach循環的每次迭代中完全覆蓋了字符串。相反,你應該追加到值:

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

謝謝,我知道它必須是這樣的。我只是沒有看到它。 – Nallware

+2

也可以考慮在將信息累積到字符串中時使用StringBuilder。 – plinth

3

你直接的問題是這樣的

使用這個代替:

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(); 
+0

謝謝。一直在尋找方法來改進我的代碼。 – Nallware