2013-09-19 4 views
2

У меня есть этот код:C# Как скопировать файл без изменения исходного имени файла

var GetDLLFilesForDir = Directory.GetFiles(directory, "*.dll", SearchOption.AllDirectories).Where(s => s.EndsWith(".dll")); 
foreach (string DLLFilesForDir in GetDLLFilesForDir) 
{ 
    File.Copy(DLLFilesForDir, Path.Combine(SADIR, DLLFilesForDir), true); 
} 

Но как вы можете видеть, когда я иду, чтобы скопировать его, я получаю сообщение об ошибке. Я знаю, что ошибка вызвана «DLLFilesForDir», потому что она пытается объединить путь, используя «DLLFilesForDir», когда я уже использую этот файл.

Проблема заключается в том, мне нужно имя файла, чтобы остаться такой же, так что если я изменил:

Path.Combine(SADIR, DLLFilesForDir); 

Для этого:

Path.Combine(SADIR, DLLFilesForDir + "1"); 

Будет ли это изменить имя файла, который копируется потому что тогда у меня было бы «filename1.dll» вместо «filename.dll», и мне нужно последнее.

Помогите оценить, спасибо.

+0

Можете ли вы быть более ясным. Почему копия не работает? Поскольку DLL уже загружена в процесс? Если это так, вам просто нужно убедиться, что все, что его загрузило, сначала выгружает. –

+0

Проблема в том, что каталог назначения не существует? Попробуйте Debug.WriteLine (Path.Combine (SADIR, DLLFilesForDir)), чтобы узнать, что такое пункт назначения. – Neil

+0

Ошибка, которую я получаю: процесс не может получить доступ к файлу «filename.dll», потому что он используется другим процессом, он не используется каким-либо другим процессом, кроме моей собственной программы. – user2784566

ответ

2

Изменить ваш

File.Copy(DLLFilesForDir, Path.Combine(SADIR, DLLFilesForDir), true); 

в

File.Copy(DLLFilesForDir, Path.Combine(SADIR, Path.GetFileName(DLLFilesForDir)), true); 


От MSDN page for Path.Combine():

Если path2 содержит абсолютный путь, этот метод возвращает Path2.

Таким образом, вы пытаетесь копию файл на себя ^^

+0

Я пытаюсь скопировать файл в каталог \ папку, погода его существует или нет, это не имеет значения, потому что он будет перезаписываться. – user2784566

+0

Ваш 'Path.Combine (SADIR, DLLFilesForDir)' возвращает 'DLLFilesForDir', потому что это абсолютный путь, поэтому вы получаете' File.Copy (DLLFilesForDir, DLLFilesForDir, true); 'который не работает. изменение, которое я предложил. – Raidri

+0

Это работает, спасибо! – user2784566

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