2013-09-16 4 views
-1

My File.Copy (xxx, xxx, true) бросает необработанное исключение. Я понимаю, что File.copy не позволяет мне использовать каталог, но в моем случае мое имя файла может изменять каждый Я прохожу через петлю. Мне нужно, чтобы имя файла было таким же, как и в моей исходной папке. Вот что я до сих пор. Есть идеи? Я посмотрел на MSDN, но он определяет мою проблему, а не решение. Любая помощь оценивается.Копирование файла после создания каталогов в C#

//Get Data from Filename 
string[] files = System.IO.Directory.GetFiles(sourcePath, "Result*.xml"); 
Regex date = new Regex(@"(?<month>[1-9]|[0-2])_(?<day>\d{2})_(?<year>\d{4})", RegexOptions.CultureInvariant); 

foreach (string s in files) 
{ 
    Match m = date.Match(s); 
    if (m.Success) 
    { 
     //Pass Groups to String 
     string month = m.Groups["month"].Value; 
     string day = m.Groups["day"].Value; 
     string year = m.Groups["year"].Value; 

     //Create Dir 
     var paths = new string[] { targetPath, year, month, day }; 
     string result = paths.Aggregate(Path.Combine);       
     Directory.CreateDirectory(result); 

     //Copy file 
     File.Copy(s, result, true);  
    } 
} 
+6

Должен ли я заглянуть в свой хрустальный шар и угадать, каково ваше исключение или вы хотели бы нам сказать? Есть 8 различных возможных исключений, которые могут быть выбраны 'File.Copy' – tnw

+1

. Я думаю, вы смущены, когда говорите, что File.Copy не позволяет вам использовать каталог - это абсолютно так. Вы должны передать * полный путь * файлов, о которых идет речь, а не только имена. См. Мой ответ ниже. – wilso132

+1

Также ознакомьтесь с [документацией] (http://msdn.microsoft.com/en-us/library/9706cfs5.aspx). Если бы у вас было, вы заметили бы, что «результат» ... не может быть каталогом «это то, что вы его передаете». Кроме того, в нем есть примеры, показывающие использование пути (я не знаю, где у вас есть, что он не позволяет путь). – tnw

ответ

2

Я думаю, ваша ошибка в том, что вы не включаете имя файла в параметр назначения.

string filename = Path.GetFileName(s); 
string newPath = Path.Combine(result, filename); 
File.Copy(s, newPath, true); 
+0

Это гвоздь на голове сэр. Спасибо. – willkk

Смежные вопросы