2014-09-19 4 views
1

특정 파일 특성을 선택할 수 있다고 가정 할 때이 코드가 있지만 어떤 이유로 인해 실제로 이상하게 작동합니다. 누구든지 오류를 발견 할 수 있습니까?파일 특성 선택 오류

이것은 형식입니다. 파일을 선택하면 checkAttributes가 트리거됩니다. (string) path는 선택된 파일의 경로입니다.

private async void Dropdown_File_Attr_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e) 
{ 
    try 
    { 
     foreach (FileAttributes attr in Enum.GetValues(typeof(FileAttributes))) 
      if (e.ClickedItem.Text == attr.ToString() && !(bool)e.ClickedItem.Tag) 
       File.SetAttributes(path, File.GetAttributes(path) | attr); 

      else if (e.ClickedItem.Text == attr.ToString() && (bool)e.ClickedItem.Tag) 
       File.SetAttributes(path, File.GetAttributes(path) & ~attr); 

     checkAttributes(path); 

     await WaitX(5); 
     Dropdown_File.ShowDropDown(); 
     Dropdown_File_Attr.ShowDropDown(); 
    } 

    catch (Exception ex) { MessageBox.Show("An error occured:\n\n" + ex.ToString(), "Error"); } 
} 

public async Task WaitX(int miliseconds) { await Task.Delay(miliseconds); } 

private List<string> getAttributes(string ppath) 
{ 
    List<string> result = new List<string>(); 

    FileAttributes attrs = File.GetAttributes(ppath); 

    if ((attrs & FileAttributes.Archive) == FileAttributes.Archive) result.Add("Archive"); 
    if ((attrs & FileAttributes.Compressed) == FileAttributes.Compressed) result.Add("Compressed"); 
    // This goes on for every attribute 

    return result; 
} 

private void checkAttributes(string ppath) 
{ 
    foreach (string s in getAttributes(ppath)) 
     foreach (ToolStripDropDownItem item in Dropdown_File_Attr.DropDownItems) 
     { 
      if (item.Text == s) 
      { 
       item.Image = Resources.check; 
       item.Tag = true; // isChecked 
      } 
      else 
      { 
       item.Image = Resources.cross; 
       item.Tag = false; // isChecked 
      } 
     } 
} 

그냥 예 :

선택, 나는 숨겨진 선택 처음에만 보통의 경우, 숨겨진 십자가 유일합니다. ReadOnly를 선택하면 ReadOnly가 십자가가있는 유일한 파일이지만 확인하면 파일이 Windows 탐색기에 여전히 숨겨져 있습니다.

나는 오류 시간을 찾고 있었다. 누구든지 나를 도와주세요 (Enums 및 FileAttributes에 대한 많은 경험이 없습니다)?

+0

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

+0

오, 죄송합니다. 여기 새로 왔어요 – thijmen321

+0

문제 없습니다. 다른 회원이 귀하의 게시물을 편집하게하는 것이 다른 사이트와 다른 점 중 하나입니다. 좋은 방법으로. –

답변

1

드롭 다운의 모든 항목을 반복하지만 클릭 한 항목에만 적용됩니다. 당신은 모든 항목을 확인해야합니다. 값을 결합하여 최종 속성 값을 구성하거나 자동으로 지워진 항목을 잡을 수 없습니다. 그냥 파일의 현재 플래그와 결합하지 않고 체크 된 하나의 속성을 설정하면됩니다.

제발, 당신의 논리는 다중 선택과 함께 작동 할 것이고, 그것은 어쨌든 허용 할 것입니다. 예를 들어 숨겨진 파일과 읽기 전용 파일을 설정할 수 있습니다.

+0

하지만 File.GetAttributes (path) | attr 이미 선택한 것과 결합해야합니다. 맞습니까? – thijmen321

+0

그건 (문제의 일부), 내가 말했듯이. 당신은 말했듯이 숨겨진 속성이 지워질 것이라고 기대합니다. – ths

+0

그걸 고쳐 준 것 같아, 고마워! – thijmen321