2011-05-10 181 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(); 
     } 
    } 
} 
相关问题