【问题标题】:how to read subfolders and files contain in it如何读取其中包含的子文件夹和文件
【发布时间】:2011-05-09 08:18:54
【问题描述】:

我可以使用 BETALIB 阅读器读取文件夹文件,但是通过在文件夹浏览器对话框中给出路径来读取它的文件很大 我可以读取文件夹,但在该文件夹中有很多文件夹和文件我想读取子文件夹。

例如:- E:\EXE\ttd\ttd1\ttd2\bsem\f1.dat E:\EXE\ttd\ttd1\ttd2\MCDEX\f1.dat

我想通过在文件夹浏览器对话框中给出路径来读取文件 EX:E:\EXE

如果我选择路径 E:\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
            {

            }


        }
    }

private void bgManual_DoWork(object sender, DoWorkEventArgs e) {

        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
        {
        }

请帮帮我

提前致谢

    }

【问题讨论】:

  • 耶稣!开始解决您的问题。
  • 你试过实现递归吗? :)
  • 实现递归意味着什么?

标签: c#


【解决方案1】:

你可以使用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)
    {
        //ProcessFile
    }

【讨论】:

  • 发生错误,高亮这一行 Reader.OpenDirectory(txtSourceBOBOMCX.Text);错误是该目录不包含任何 betastock 文件
  • 您可以将此代码添加到我的代码中吗?我是 C# 新手,您可以添加吗?可能是我做错了,这就是为什么我收到错误请您帮我添加
  • 不需要使用打开的目录,可以使用getdirectories和getfiles来获取一个文件夹的内容,然后使用foreach进行迭代处理。
  • 如何在代码中使用多个路径例如:string path = "C:\\work"; string path2 = "C:\\Business";
  • 如何在代码中使用多个路径。一个文件夹中有很多子文件。我想通过多个或三个字符串下载其中包含的子文件,例如: - work 是主文件夹,Business,job 是我想使用字符串路径下载所有子文件的子文件 = "C:\\Work\Business "; string path2 = "C:\\Work\job";如何通过多个字符串下载文件
猜你喜欢
  • 2015-09-14
  • 2012-07-24
  • 1970-01-01
  • 2012-02-22
  • 1970-01-01
  • 2019-08-27
  • 1970-01-01
  • 2012-06-13
  • 1970-01-01
相关资源
最近更新 更多