C# 如何从文件夹和子文件夹中提取数据文件

C# 如何从文件夹和子文件夹中提取数据文件,c#,C#,我在读取文件和子文件夹时遇到问题。对于给定的固定源路径,E:\\Folder\\test\\test2,我的代码读起来很好 测试中有许多文件夹,如test2、test3、test4等。我想提取主文件夹test中的数据文件 例如,我想提取测试中的文件,所以我想读取测试中包含的所有文件,而不是为test3、test4和许多文件编写代码。我想在另一个驱动器上以相同的源结构提取和写入所有文件 例如,如果源结构类似于E:\\Folder\\test\\test2,那么目标结构应该类似于C:\\Folder

我在读取文件和子文件夹时遇到问题。对于给定的固定源路径,
E:\\Folder\\test\\test2
,我的代码读起来很好

  • 测试中有许多文件夹,如test2、test3、test4等。我想提取主文件夹
    test
    中的数据文件

  • 例如,我想提取测试中的文件,所以我想读取测试中包含的所有文件,而不是为test3、test4和许多文件编写代码。我想在另一个驱动器上以相同的源结构提取和写入所有文件

  • 例如,如果源结构类似于
    E:\\Folder\\test\\test2
    ,那么目标结构应该类似于
    C:\\Folder\\test\\test2

  • 有没有办法做到这一点

    这是我的密码

    private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
    {
        DateTime dt = dateTimePicker1.Value;
        txtSelectedDate.Text = dt.ToString("yyyyMMdd");
        selectedDate = txtSelectedDate.Text;
    }
    
    private void button2_Click(object sender, EventArgs e)
    {
        DateTime stdate = Datetimepicker1.value;
        while (stdate <= DateTime.Now)
        {
            txtSelectedDate.Text = stdate.ToString("yyyyMMdd");
            selectedDate = txtSelectedDate.Text;
            string DayBgSpot = "E:\\Folder\\test\\test2";
            string DayBgSpotDestination = "E:\\Folder1";
            int DT = int.Parse(txtSelectedDate.Text);
            FileReader Reader = new FileReader();
            FileReader Reader1 = new FileReader();
            Reader.OpenDirectory(DayBgSpot);
            Reader.ReadNaster();
            string path = DayBgSpotDestination + "\\" + 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;
    
                    Reader.OpenSecurityByName(Reader.sMaSecName);
                    if (Reader.iSeRecords > 0)
                    {
                        while (Reader.iSeRecordsLeft > 0)
                        {
                            Reader.ReadDay();
                            float O = Reader.dSeo;
                            float H = Reader.dSeh;
                            float L = Reader.dSel;
                            float C = Reader.dSec;
                            double V = Reader.dSeV;
                            double OI = Reader.dSrest;
                            string T = Reader.iSeTime.ToString();
                            string D = Reader.iSeDate.ToString();
                            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.ReadNaster();
                }
    
                Reader.CloseDirectory();
                Strwriter.Close();
                Strwriter.Dispose();
            }
            catch
            {
            }
            stdate = stdate.AddDays (1); // It will get next date till present
        }
    }
    
    private void dateTimePicker1\u值已更改(对象发送方,事件参数e)
    {
    DateTime dt=dateTimePicker1.Value;
    txtSelectedDate.Text=dt.ToString(“yyyyymmdd”);
    selectedDate=txtSelectedDate.Text;
    }
    私有无效按钮2\u单击(对象发送者,事件参数e)
    {
    DateTime stdate=Datetimepicker1.value;
    而(日期0)
    {
    字符串SecName=Reader.sMaSecName;
    字符串符号=Reader.sMaSecSymbol;
    符号=前缀+符号;
    int abc=0;
    Reader.OpenSecurityByName(Reader.sMaSecName);
    如果(Reader.iSeRecords>0)
    {
    而(Reader.iSeRecordsLeft>0)
    {
    Reader.ReadDay();
    float O=Reader.dSeo;
    float H=Reader.dSeh;
    浮点L=Reader.dSel;
    float C=Reader.dSec;
    双V=Reader.dSeV;
    double OI=Reader.dSrest;
    字符串T=Reader.iSeTime.ToString();
    字符串D=Reader.iSeDate.ToString();
    if(int.Parse(D)=DT)
    {
    字符串a=string.Concat(SecName,,,,,Symbol,,,,D,,,,T,,,,,,O,,,,H,,,,,L,,,C,,,,V,,,,OI);
    如果(SecName!=“”&&V!=0)
    {
    书写标准(a);
    }
    }
    }
    }
    abc++;
    Reader.ReadNaster();
    }
    Reader.CloseDirectory();
    Strwriter.Close();
    Strwriter.Dispose();
    }
    接住
    {
    }
    stdate=stdate.AddDays(1);//下一次约会到现在为止
    }
    }
    
    类似

    System.IO.DirectoryInfo baseFolder = new DirectoryInfo(@"c:\Folder\test\");
    string destinationPath = @"e:\Folder\test\";
    System.IO.DirectoryInfo[] subDirs = baseFolder.GetDirectories();
    foreach (System.IO.DirectoryInfo dirInfo in subDirs)
    {
       string subFolder = dirInfo.Name;
       System.IO.FileInfo[] fileInfos = dirInfo.GetFiles("*.txt");
       foreach (System.IO.FileInfo fileInfo in fileInfos)
       {
          // Do something with the files
          string writePath = destinationPath + subFolder + @"\" + fileInfo.Name;
          // Write
       }
    }
    

    如果您使用的是.NET 4.0,这是一行:

    var filepaths = Directory.GetFiles(path: @"C:\", searchPattern: "*pattern*", searchOption: SearchOption.AllDirectories);
    
    显然,根路径和搜索模式与建议的示例不一致,但我的意图应该是明确的

    我希望这有帮助