2016-03-02 3 views
0

Я пытаюсь скопировать файл драйвера из папки моего приложения в папку драйвера в Windows 7. Но когда я запустил эту программу, файл уже существует. Исключение произошло, если я проверил в папке с драйвером вручную файл вообще не существует.Файл уже существует exception file.copy

Program.sDriverPath = Path.Combine(Program.sStartUpPath, @"windows7\amd64\MyDriver.sys"); 
string sPath = sDriverPath; 
string sDestPath = Path.Combine(Environment.ExpandEnvironmentVariables(@"%windir%\system32"), @"drivers\MyDriver.sys"); 
MessageBox.Show("Source " + sDriverPath); 
File.Copy(sDriverPath, sDestPath); 
+0

'File.Copy (sDriverPath, sDestPath, true);' добавьте третью перегрузку, чтобы указать, что вы хотите перезаписать целевой файл. – Equalsk

+0

CopyFile (sDriverPath, sDestPath, true); Я попытался Но все еще не работает –

+0

Что вы используете? 32 или 64 бит? – Pikoh

ответ

0

Если вы хотите перезаписать существующий файл, который нужно использовать the overload which has a boolean parameter:

public static void Copy(
string sourceFileName, 
string destFileName, 
bool overwrite) 

и указать true для overwrite.

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

Попробуйте установить контрольную точку в коде непосредственно перед вызовом File.Copy() и проверьте параметр sDestPath.

Я подозреваю, что происходит то, что File System Redirector молча перенаправляет ваше приложение в другую папку.

Попробуйте вместо этого проверить папку %windir%\SysWOW64.

Наконец, обратите внимание, что пользователь процесса должен работать как администратор для записи файлов в это место.

+0

Это перегрузка, или это просто аргумент со значением по умолчанию false? –

+0

@JohnDemetriou это перегрузка – Sakura

+0

@Sakura да после обзора msdn docs Я видел это :) но почему же? не было бы более разумным, если бы это было значение по умолчанию? –

0

Спасибо @Matthew Watson Я нашел решение. FSRedirector перенаправляет папку system32 в папку SysWow64. Вернитесь в папку syswow64, затем перейдите в папку с дисками, где вы найдете свой файл.