2009-12-28 4 views
1

저는 전문가에게 물었습니다. 그러나 나는 여전히 내가 가진 문제를 해결할 수 없었습니다. xls, doc 또는 * pdf와 같은 특정 파일을 검색하는 콘솔 프로그램을 작성하고 싶습니다. 나는 이와 같은 코드를 작성했지만, 사용자 디렉토리에 관해서는 UnauthorizedAccessException을 사용합니다. 사용자 디렉토리를 검색 할 수있는 콘솔 응용 프로그램을 작성하려면 어떻게해야합니까? 나는 clickonce를 끄고 requireAdministrator가있는 manifest로 빌드한다. Vista 또는 7에서는 권한 상승 대화 상자가있는 관리자 권한으로 실행됩니다.사용자 디렉토리를 검색 할 수있는 콘솔 응용 프로그램을 작성하려면 어떻게해야합니까?

다음은 전체 코드입니다.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 

namespace ConsoleApplication2 
{ 
    class Program 
    { 
     // 
    private const string FILE_NAME = "search.txt"; 
    private const string SEARCH_WORDS1 = "*.doc"; 
    private const string SEARCH_WORDS2 = "*.ppt"; 
    private const string SEARCH_WORDS3 = "*.jtd"; 
    private const string SEARCH_WORDS4 = "*.pdf"; 

    private const string END_WORDS = "\r\nSearch is finished.\r\n"; 

    //This funcion echoes the messages. 
    void FileCheck() 
    { 
     string echo_words = "\r\nNow starts searching these files!" + SEARCH_WORDS1 + " " 
           + SEARCH_WORDS2 + " " + SEARCH_WORDS3 + " " + SEARCH_WORDS4 + " " 
           + "!\r\n"; 
     if (File.Exists(FILE_NAME)) 
     { 
      Console.WriteLine("{0} is already exists. Replace it to the new one.", FILE_NAME); 
      Console.WriteLine(echo_words); 
      File.Delete(FILE_NAME); 
      using (StreamWriter sw = File.CreateText(FILE_NAME)) 
      { 
       sw.WriteLine(FILE_NAME + " is already exists. Replace it to the new one.\r\n"); 
       sw.WriteLine(echo_words); 
       sw.Close(); 
      } 
     } 
     else 
     { 

      using (StreamWriter sw = File.CreateText(FILE_NAME)) 
      { 
       Console.WriteLine(echo_words); 
       sw.WriteLine(echo_words); 
       sw.Close(); 
      } 
     } 
    } 
    //This function write to a file that search is finished. 
    void EndMessage() 
    { 
     using (StreamWriter sw = File.AppendText(FILE_NAME)) 
     { 
      Console.WriteLine(END_WORDS); 
      sw.WriteLine(END_WORDS); 
      sw.Close(); 
     } 
    } 
    //This function searches files given and write to a file. 
    void DirSearch(string sDir, string SEARCH_WORDS, int row) 
    { 
     int i; 
     i = 0; 
     string DeviceError = "off"; 

     try 
     { 
      foreach (var d in Directory.GetDirectories(sDir)) 
      { 
       DirectoryInfo di = new DirectoryInfo(d); 
       if ((di.Attributes & FileAttributes.ReparsePoint) == FileAttributes.ReparsePoint) { 
        //ReparsePoint could not be serached 
        continue; 
       } 
       try 
       { 
        foreach (string file in Directory.GetFiles(d, SEARCH_WORDS, SearchOption.AllDirectories)) 
        { 
         Console.WriteLine(file); 
         using (StreamWriter sw = File.AppendText(FILE_NAME)) 
         { 
          sw.WriteLine(file); 
          sw.Close(); 
          i++; 
         } 
        } 
       } 
       catch (UnauthorizedAccessException) 
       { 
        //Unauthorized 
        Console.WriteLine(d + " is not allowd to be read !!"); 
        using (StreamWriter sw = File.AppendText(FILE_NAME)) 
        { 
         sw.WriteLine(d + " is not allowd to be read"); 
         sw.Close(); 
        } 
       } 
      } 
     } 
     catch (IOException) 
     { 
      //Device is not ready 
      DeviceError = "on"; 
     } 
     if (DeviceError == "off") 
     { 
      if (i > 0) 
      { 
       Console.WriteLine(i + "numbers " + SEARCH_WORDS + " Files were found!\r\n"); 
       using (StreamWriter sw = File.AppendText(FILE_NAME)) 
       { 
        sw.WriteLine(i + "numbers " + SEARCH_WORDS + " Files were found!\r\n"); 
        sw.Close(); 
       } 
      } 
      else 
      { 
       Console.WriteLine(SEARCH_WORDS + " Files were not found !\r\n"); 
       using (StreamWriter sw = File.AppendText(FILE_NAME)) 
       { 
        sw.WriteLine(SEARCH_WORDS + " Files were not found !\r\n"); 
        sw.Close(); 
       } 
      } 
     } 
    } 

    //Main 
    static void Main(string[] args) 
    { 
     Program x = new Program(); 
     string[] drives = Environment.GetLogicalDrives(); 
     int row = drives.GetLength(0); 
     string my_documents = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 
     Console.WriteLine("Logical Drives are " + row + "."); 
      using (StreamWriter sw = File.AppendText(FILE_NAME)) 
      { 
       sw.WriteLine("Logical Drives are " + row + "."); 
       sw.Close(); 
      } 
      int i = 0; 
      x.FileCheck(); 
      while (row > 0) 
      { 
       x.DirSearch(drives[i], SEARCH_WORDS1, row); 
       x.DirSearch(drives[i], SEARCH_WORDS2, row); 
       x.DirSearch(drives[i], SEARCH_WORDS3, row); 
       x.DirSearch(drives[i], SEARCH_WORDS4, row); 

       row--; 
       i++; 
      } 
      x.EndMessage(); 
    } 
} 

}

+0

코드 예제를 4 칸 추가로 들여 써야합니다. 현재 읽는 것은 매우 어렵습니다. –

+0

마르첼로 농담하는거야? – baldy

답변

1

당신이 얻고있는 오류는 파일 시스템 권한에 의해 발생합니다. 유일한 방법은 지정된 폴더에 대한 액세스 권한을 사용하는 자격 증명을 부여하고 응용 프로그램을 '관리자'로 실행하거나 각 사용자의 폴더에 대해 특정 사용자로 응용 프로그램을 실행하는 것입니다.

관련 문제