как читать вложенные папки и содержащиеся в них файлы

#c#

#c#

Вопрос:

я могу прочитать файлы папки с помощью BETALIB Reader, но это слишком сложно для чтения, указывая путь по очереди в folderbrowserdialog я могу прочитать папку, но в этой папке много папок и файлов, которые я хочу прочитать во вложенных папках.

для каждого примера:- E:EXEttdttd1ttd2bsemf1.dat E:EXEttdttd1ttd2MCDEXf1.dat

я хочу прочитать файлы, указав путь в folderbrowserdialog НАПРИМЕР: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
            {

            }


        }
    }
  

частная пустота bgManual_DoWork (отправитель объекта, 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 != "" amp;amp; V != 0)
                                {
                                    Strwriter.WriteLine(a);
                                }

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

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

Пожалуйста, помогите мне

Заранее спасибо

     }
  

Комментарии:

1. Господи! Начните исправлять свой вопрос.

2. Вы пробовали реализовать рекурсию? 🙂

3. средства реализации рекурсии?

Ответ №1:

вы можете использовать System.Библиотека классов ввода-вывода DirectoryInfo и FileInfo class, и логика выглядит следующим образом

1) Создайте две функции для обработки каталога и одну для обработки файла 2) В каком каталоге функция чтения считывает, проверяет, является ли элемент файлом или каталогом 3) Если элемент является каталогом, он рекурсивно вызывает сам себя 4) Если элемент является файлом, он отправляет его в метод file process для обработки

  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
    }
  

Комментарии:

1. возникает ошибка, при которой эта строка чтения высвечивается. Откройте директорию (txtSourceBOBOMCX.Text); и ошибка заключается в том, что каталог не содержит никаких файлов betastock

2. можете ли вы добавить этот код в мой код, я новичок в C #, пожалуйста, добавьте, возможно, я делаю ошибку, поэтому я получаю ошибку, пожалуйста, можете ли вы добавить для меня

3. нет необходимости использовать open directory, вы можете использовать getdirectories и getfiles для доступа к содержимому папки, а затем выполнить итерацию с использованием foreach для обработки.

4. как использовать несколько путей в коде, например: string path = «C:\work «; string path2 = «C:\Business «;

5. как использовать несколько путей в коде. в папке много вложенных файлов. я хочу загрузить содержащиеся в нем вложенные файлы несколькими или тройными строками, например: — work — это основная папка, а Business, job — это вложенные файлы. Я хочу загрузить все вложенные файлы, используя string path = «C:\WorkBusiness «; string path2 = «C:\Workjob «; как я могу загружать файлы с помощью нескольких строк