2015-07-07 3 views
-2

Я использую два DateTimePickers, чтобы указать диапазон дат, затем я использую CheckedListBox, чтобы указать некоторые строки для имен файлов с подстановочными знаками для перечисления в подкаталоге каждый день в пределах пути переменной среды системы. Я хочу скопировать из этого источника в пункт назначения с помощью FileInfo.Copy.Неисправность, указывающая имя файла назначения для использования в FileInfo.Copy пример из MSDN

У меня есть код, который уже создает необходимые каталоги. Но у меня возникли проблемы с указанием имен файлов назначения - они вообще не указываются с тем, как я это написал.

Я думал об использовании регулярных выражений, но после некоторого рытья я нашел this MSDN article, который, похоже, уже делает то, что я хочу. Я думаю, мне нужно изменить свой код, чтобы использовать его. Я мог бы использовать некоторую помощь, соответствующую тому, что у меня уже есть, в том, что показывает MSDN в своем примере.

Я был в этой части своей программы уже месяц, что привело меня к изучению совсем немного о C#, параллельном программировании, async, лямбда-выражениях, работниках фона и т. Д. То, что кажется простым, стало большая щель для меня. Для этого вопроса мне просто нужно подтолкнуть в правильном направлении, и я буду очень благодарен!

Вот мой код, как он стоит:

private async void ProcessFiles() 
    { 

     // create a list of topics 
     var topics = topicsBox.CheckedItems.Cast<string>().ToList(); 

     // create a list of source directories based on date range 
     var directories = new List<string>(); 
     var folders = new List<string>(); 
     for (DateTime date = dateTimePicker1.Value.Date; 
      date.Date <= dateTimePicker2.Value.Date; 
      date = date.AddDays(1)) 
     { 
      directories.Add(_tracePath + @"\" + date.ToString("yyyy-MM-dd") + @"\"); 
      folders.Add(@"\" + date.ToString("yyyy-MM-dd") + @"\"); 
     } 

     // create a list of source files to copy and destination 
     // revise based on https://msdn.microsoft.com/en-us/library/kztecsys.aspx?f=255&MSPPError=-2147217396 
     foreach (var path in directories) 
     { 
      var path1 = path; 
      try 
      { 
       foreach (var files2 in folders) 
       { 
        // create the target directory 
        var destPath = textBox1.Text + @"\" + textBox4.Text + files2; 
        Console.WriteLine("Target directory is {0}", destPath); 
        Console.WriteLine("Destination filename is {0}", files2); 
        foreach (var files in topics) 
        { 
         foreach (string sourcePath in Directory.EnumerateFiles(path1, files + "*.*", SearchOption.AllDirectories)) 
         { 
          // copy the files to the temp folder asynchronously 
          Console.WriteLine("Copy {0} to {1}", sourcePath, destPath); 
          Directory.CreateDirectory(sourcePath.Replace(sourcePath, destPath)); 
         } 
        } 
       } 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine(e.Message); 
      } 
     } 
    } 
+0

«Упростить мой код» не является допустимым и позволило типа здесь. Вы должны задавать только технические вопросы. Попробуйте прочитать другие вопросы людей, чтобы увидеть, что такое и не разрешено. –

+0

Я обновлю название. – Dshiz

+0

@JK. «Помогу, я застрял, я не хочу нарушать то, что сейчас работаю». хватает? – Dshiz

ответ

1

Так sourcePath содержит исходный путь и имя файла. Вы можете легко построить путь назначения из этого, например, так:

// Get just the filename of the source file. 
var filename = Path.GetFileName(sourcePath); 

// Construct a full path to the destination by combining the destination path and the filename. 
var fullDestPath = Path.Combine(destPath, filename); 

// Ensure the destination directories exist. Don't pass in the filename to CreateDirectory! 
Directory.CreateDirectory(destPath); 

Затем вы можете скопировать файл (синхронно), как это:

File.Copy(sourcePath, fullDestPath); 
+0

Прямо сейчас, destPath не содержит имя файла. sourcePath имеет весь путь, включая имя файла. Я не уверен, как передать это в destPath. – Dshiz

+0

Извините, мне следовало бы взглянуть на код немного ближе (когда есть много кода для объяснения кажущейся простой проблемы, я (и я уверен, другие) часто читал его слишком поспешно!). Я отредактирую свой ответ. – Sam

+1

Все в порядке .. Это показывает мою нехватку знаний/опыта, поэтому я здесь прошу о помощи! Спасибо, что посмотрели. – Dshiz