2011-06-01 2 views
-3
  1. Je rencontre un problème lors de la lecture des fichiers et sous-dossiers. Mon code lit correctement pour le chemin de source fixe donné, E:\\Folder\\test\\test2.Comment extraire les fichiers de données des dossiers et sous-dossiers

  2. Il existe de nombreux dossiers dans le test, comme test2, test3, test4, etc. Je veux extraire les fichiers de données dans le dossier principal, test. Par exemple, je veux extraire les fichiers en test, donc je veux lire tous les fichiers contenus dans le test au lieu d'écrire mon code pour test3, test4 et beaucoup d'autres. Et je veux extraire et écrire tous les fichiers en tant que même structure de source sur un autre disque.

  3. comme, si la structure source est comme E:\\Folder\\test\\test2 alors la structure de destination doit être comme C:\\Folder\\test\\test2

Est-il possible de le faire?

Voici mon code,

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

Répondre

1

Quelque chose comme

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

Si vous utilisez .NET 4.0 c'est une ligne:

var filepaths = Directory.GetFiles(path: @"C:\", searchPattern: "*pattern*", searchOption: SearchOption.AllDirectories); 

De toute évidence, le chemin racine et Le profil de recherche ne correspond pas à l'échantillon proposé, mais mon intention devrait être claire.

J'espère que cela aide

Questions connexes