2013-10-22 4 views
0

내 드라이브 목록을 얻으려면 훌륭한 예제 here을 사용하고 있습니다. 그것은 작동하고있는 것처럼 보이지만 그것은 나의 마지막 "Local"과 나의 마지막 "Network"드라이브만을 열거하기 때문에 나는 논리 오류가 있다고 확신한다. 누구든지 제안을 제안 할 수 있다면 좋을 것입니다. 이것은 단지 생산네트워크 드라이브 목록

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 :

+1

제목을 편집했습니다. "[제목에"태그 "가 포함되어 있어야합니까?] (http://meta.stackexchange.com/questions/19190/)"합의가 "아니오, 그렇지 않아야합니다"로 표시되어야합니다. –

+0

당신은 클라이언트 컴퓨터가 아니라 서버에있는 드라이브 만 가져올 것이라는 것을 알고 있습니까? 그게 네가 원하는만큼 괜찮지 만, ASP.Net에 태그를 달았 기 때문에, 누군가가 웹을 통해 서버를 때리는 것으로 가정한다. 어떤 로컬 서버 드라이브를 사용할 수 있는지 아는 것이 방문자에게 도움이 될지 확신 할 수 없습니다 .... –

+0

@JohnSaunders 감사합니다. – Nallware

답변

3

foreach 루프의 각 반복에서 문자열을 완전히 덮어 쓰기 때문에 마지막 문자 만 표시됩니다. 대신 값을 추가해야합니다

loc += drive.Name + " "; 

net += drive.Name + " "; 

제안 :

사용하여 StringBuilder 문자열을 만들 수

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

고마워, 나는 이런 식으로해야한다는 것을 알았다. 나는 단지 그것을 보지 않고 있었다. – Nallware

+2

정보를 문자열로 누적 할 때마다 StringBuilder를 사용하는 것도 고려하십시오. – plinth

3

귀하의 즉각적인 문제는이 대신

사용하는 것입니다.

  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

관련 문제