如何将所有文件包含在子文件夹和文件夹中的.txt文件中

时间:2011-05-10 07:17:52

标签: c#

以下代码正在读取包含在子文件夹和文件夹中的所有文件。 但我需要将所有文件包含在子文件夹和文件夹中的.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

4 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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
}

答案 2 :(得分:0)

这将获取所有文件夹和子文件夹filesNames。 您可以指定要查找的文件类型,或*来获取每个文件。

public void File_To_Text(string filepath)
{  
  string [] fname;

            fname = Directory.GetFiles(filepath, "*.*", SearchOption.AllDirectories).Select(x => Path.GetFileName(x)).ToArray();
            File.WriteAllLines("c:\\images.txt", fname, Encoding.UTF8);
}

答案 3 :(得分: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();
        }
    }
}