2011-05-09 4 views
0

BETALIB 판독기를 사용하여 폴더 파일을 읽을 수 있지만 folderbrowserdialog에서 경로를 하나씩 지정하여 읽을 수 있습니다. 폴더를 읽을 수 있지만 폴더가 많습니다. 폴더 및 파일 하위 폴더를 읽고 싶습니다. eaxample에 대한하위 폴더 및 파일을 읽는 방법

: - E : \ \ TTD \ ttd1 \ ttd2 \ bsem \ f1.dat E EXE : \ EXE \ TTD \ ttd1 \ ttd2 \ MCDEX \ f1.dat

내가 읽고 싶은 E : EXE

\ 내가 경로 E를 선택하면 다음 folderbrowserdialog EX에 경로를 제공하여 파일이 \는 모든 하위 폴더를 읽어야하고 파일을 그 안에 포함 된 EXE.

중 하나가 내가 코드

private void btnSourceBOMCX_Click(object sender, EventArgs e) 
    { 
     fbdSourceBOMCX.Description = "Please select BOMCX source folder"; 
     fbdSourceBOMCX.RootFolder = Environment.SpecialFolder.Desktop; 
     if ((fbdSourceBOMCX.ShowDialog() != DialogResult.Cancel) || (fbdSourceBOMCX.SelectedPath != "")) 
     { 
      sourceBOMCX = fbdSourceBOMCX.SelectedPath; 
      if (File.Exists(sourceBOMCX + "\\Master")) 
      { 
       txtSourceBOMCX.Text = fbdSourceBOMCX.SelectedPath; 
       Interaction.SaveSetting ((new Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase()).Info.Title , "RealTime Converter", "sourceBOMCX", fbdSourceBOMCX.SelectedPath); 
      } 
      else 
      { 

      } 


     } 
    } 

개인 무효 bgManual_DoWork (개체를 보낸 사람, DoWorkEventArgs 전자)로 변경해야합니다 걸 말할 수있는 것은 {

 try 
     { 
      int DT = int.Parse(txtSelectedDate.Text); 
      BETALIB.BLReader Reader = new BETALIB.BLReader(); 
      BETALIB.BLReader Reader1 = new BETALIB.BLReader(); 
      Reader.OpenDirectory(txtSourceBOBOMCX.Text); 
      Reader.ReadMaster(); 
      string path = txtDestinationBOBOMCX.Text + "\\XYZ-" + txtSelectedDate.Text + ".txt"; 
      StreamWriter Strwriter = new StreamWriter(path); 

      try 
      { 
       while (Reader.iMaRecordsLeft > 0) 
       { 
        string SecName = Reader.sMaSecName; 
        string Symbol = Reader.sMaSecSymbol; 
        Symbol = prefix + Symbol; 
        int abc = 0; 
        int xyz = lbselectedBOBOMCX.Items.Count - 1; 
        while (abc <= xyz) 
        { 
         if (SecName == (string)lbselectedBOBOMCX.Items[abc]) 
         { 

          Reader.OpenSecurityByName(Reader.sMaSecName); 
          Reader.SeekToEnd(); 
          Reader.Seek(-1); 
          Reader.ReadDay(); 
          float O = Reader.dSeOpen; 
          float H = Reader.dSeHigh; 
          float L = Reader.dSeLow; 
          float C = Reader.dSeClose; 
          double V = Reader.dSeVolume; 
          double OI = Reader.dSeOpenInterest; 
          string T = Reader.iSeTime.ToString(); 
          string D = Reader.iSeDate.ToString(); 

          label9.Text = SecName + "/"; 
          if (int.Parse(D) == DT) 
          { 
           string a = string.Concat(SecName, ",", Symbol, ",", D, ",", T, ",", O, ",", H, ",", L, ",", C, ",", V, ",", OI); 
           if (SecName != "" && V != 0) 
           { 
            Strwriter.WriteLine(a); 
           } 

          } 
         } 
         abc++; 
        } 
        Reader.ReadMaster(); 
       } 

       Reader.CloseDirectory(); 
       Strwriter.Close(); 
       Strwriter.Dispose(); 
      } 
      catch 
      { 
       Reader.CloseDirectory(); 
       Strwriter.Close(); 
       Strwriter.Dispose(); 
      } 
     } 
     catch 
     { 
     } 

나에게

감사를 도와주세요 사전에

+0

예수에 대한 처리 방법을 파일로 보낼 파일의 경우는 자신을 재귀 적으로 4)를 호출합니다! 질문 수정을 시작하십시오. – user492238

+0

재귀 구현을 시도 했습니까? :) –

+0

재귀를 구현하는 것을 의미합니까? – voipservicesolution

답변

2

당신은 System.IO 클래스 라이브러리의 DirectoryInfo과에서는 FileInfo 클래스를 사용할 수 있습니다 및

1) 공정 디렉토리에 두 가지 기능을 만들려면 다음 하나의 디렉토리 읽기 기능이있는 경우 검증 읽는에서 파일 2)을 처리하기로 논리 간다 항목은 파일이나 디렉토리 3) 항목이 디렉토리 인 경우 항목이 그것을 처리

public void fnProcessDirectory(string strPath) 
    { 
     if (File.Exists(strPath)) 
     { 
      fnProcessFile(strPath); 
     } 
     else if (Directory.Exists(strPath)) 
     { 
      string[] fileEntries = Directory.GetFiles(strPath); 
      string[] subdirEntries = Directory.GetDirectories(strPath); 

      foreach (string fileName in fileEntries) 
      { 
       fnProcessFile(fileName); 
      } 

      foreach (string dirName in subdirEntries) 
      { 
       fnProcessDirectory(dirName); 
      } 
     } 
    } 

    public void fnProcessFile(string strPath) 
    { 
     //ProcessFile 
    } 
+0

오류가 발생하면이 줄이 켜집니다. Reader.OpenDirectory (txtSourceBOBOMCX.Text); 그리고 오류가 디렉토리 betastock 파일이 포함되어 있지 않습니다 – voipservicesolution

+0

내 코드 에이 코드를 추가 할 수 있습니다 내가 C에 새로운 오전 # 당신이 할 수 있습니다 실수를하고있다 내가 할 수 있습니다 추가 할 수 있습니다 내가 오류를 받고 있습니다 나 – voipservicesolution

+0

오픈 디렉토리를 사용할 필요가 없다. getdirectories와 getfiles를 폴더의 내용에 사용할 수 있고, foreach를 사용하여 반복 처리 할 수있다. –