2011-05-10 144 views
1

以下代碼正在讀取包含在子文件夾和文件夾中的所有文件。 但我需要將所有文件包含在子文件夾中和文件夾中.txt文件中。 任何人都可以告訴我如何改變它。如何編寫所有文件包含在子文件夾和文件夾中的.txt文件中

private void btnSearchNow_Click(object sender, EventArgs e) 
{ 
    BLSecurityFinder lSecFinder = new BLSecurityFinderClass(); 
    int iCounter = 0; 

    lbselected.Items.Clear(); 

    lSecFinder.bScanSubDirectories = chkSubfolders.Checked; 

    try 
    { 
     lSecFinder.FindSecurity(txtSymbol.Text, txtDirectory.Text); 
     while (lSecFinder.bSecLeft) 
     { 
      // Insert(iCounter, lSecFinder.SecName); 

      lbselected.Items.Add(new SampleData() { Name = lSecFinder.SecName }); 
      lbselected.DisplayMember = "Name"; 
      lSecFinder.FindNextSecurity(); 

      iCounter++; 
     } 
    } 
    catch (System.Runtime.InteropServices.COMException ComEx) 
    { 
     //MessageBox.Show (ComEx.Message); 
    } 
    finally 
    { 
     lSecFinder.DestroySearchDialog(); 
    } 
} 



    private void btnClose_Click(object sender, EventArgs e) 
{ 
    this.Close(); 
} 

感謝addvance

+0

http://www.google.com/search?hl=en&q=C%23%20write%20text%20file – 2011-05-10 07:21:19

+0

目錄/ s/b> files.txt – Larry 2011-05-10 07:42:21

回答

3
var searchPattern = "*.*"; 
var output = @"c:\results.txt"; 
var files = Directory.GetFiles(folderBrowserDialog1.SelectedPath, 
    searchPattern, 
    chkSubfolders.Checked ? SearchOption.AllDirectories:SearchOption.TopDirectoryOnly); 
File.WriteAllLines(output, files); 
+0

我收到錯誤錯誤突出顯示var files = Directory.GetFiles(path,searchPattern,SearchOption.AllDirectories);並且錯誤是值不能爲空。 參數名稱:searchPattern請幫忙 – voipservicesolution 2011-05-10 08:00:50

+0

好像你沒有爲searchPattern設置一個值 - 它不能爲空。在使用它之前,你需要定義一個包含searchPattern的字符串。 – ScruffyDuck 2011-05-10 08:10:47

+0

我改變了代碼來使用你的變量和控件。 – 2011-05-10 08:35:41

0

你可以使用System.IO類庫的DirectoryInfo和FileInfo類和邏輯去如下

1)工藝的目錄和一個創建兩個功能處理文件

2)在哪個目錄讀取函數讀取驗證,如果該項目是文件或目錄

3)如果該項目是遞歸調用自己的目錄4)如果項目是文件,它發送到文件處理方法進行處理

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) 
{ 
    //write the file name in the txt file 
} 
+0

可以ü說我應該在我的代碼中添加此代碼請 – voipservicesolution 2011-05-10 08:55:51

+0

在btnBrowse_Click函數中調用fnProcessDirectory並將文件名分配到fnProcessFile中的類級別變量 – 2011-05-10 09:17:42

+0

可以嗎?請告訴我如何在btnBrowse_Click中調用fnProcessDirectory我是C# – voipservicesolution 2011-05-10 09:21:33

0

這將讓所有的文件夾和子文件夾filesNames。 您可以指定要查找的文件的類型,或者*來獲取每個文件。

​​
0

這裏是另一個版本,它直接擴展代碼:

private void btnSearchNow_Click(object sender, EventArgs e) 
{ 
    BLSecurityFinder lSecFinder = new BLSecurityFinderClass(); 
    int iCounter = 0; 

    lbselected.Items.Clear(); 

    lSecFinder.bScanSubDirectories = chkSubfolders.Checked; 

    using (StreamWriter writer = new StreamWriter(@"C:\results.txt", false)) 
    { 
     try 
     { 
      lSecFinder.FindSecurity(txtSymbol.Text, txtDirectory.Text); 
      while (lSecFinder.bSecLeft) 
      { 
       // Insert(iCounter, lSecFinder.SecName); 

       lbselected.Items.Add(new SampleData() { Name = lSecFinder.SecName }); 
       lbselected.DisplayMember = "Name"; 

       // assuming SecName is the full filename 
       writer.WriteLine(lSecFinder.SecName); 

       lSecFinder.FindNextSecurity(); 

       iCounter++; 
      } 
     } 
     catch (System.Runtime.InteropServices.COMException ComEx) 
     { 
      //MessageBox.Show (ComEx.Message); 
     } 
     finally 
     { 
      lSecFinder.DestroySearchDialog(); 
     } 
    } 
} 
相關問題