Как переместить файлы на диске C с помощью MoveFileEx APi - PullRequest
0 голосов
/ 07 июня 2010

, когда я использую MoveFileEx для перемещения файлов на диске C, но я получаю ОШИБКУ, ОТКАЗАННЫЙ В ДОСТУПЕ. Любые решения

int i ;
DWORD dw ;
String^ Source = "C:\\Folder\\Program\\test.exe" ;
String^ Destination = "C:\\test.exe"; // move to program Files Folder

pin_ptr<const wchar_t> WSource = PtrToStringChars(Source);
pin_ptr<const wchar_t> WDestination = PtrToStringChars(Destination);

i = MoveFileEx( WSource, WDestination ,MOVEFILE_REPLACE_EXISTING | MOVEFILE_COPY_ALLOWED ) ;
dw = GetLastError() ;

Ответы [ 2 ]

0 голосов
/ 07 июня 2010

является ли код, указанный в вашем вопросе, реальным используемым кодом ???

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

поэтому ваши пути должны быть:

String source = "C:\\Folder\\Program\\test.exe";
String Destination = "C:\\test.exe";

также, ^ не является допустимым символом в C и C ++, он действителен только для определения указателей в Pascal. Я подозреваю, что ваш код действительно написан на Паскале, но тогда я не уверен, что приведенное выше замечание о escape-символе в строке действительно в Паскале ...

0 голосов
/ 07 июня 2010

Вы должны убедиться, что учетная запись пользователя, под которой работает ваш процесс, имеет права на чтение перемещаемого файла и доступ на запись туда, куда он записывается. И что перемещаемый файл не заблокирован другим процессом, и что в целевом каталоге нет файла с таким же именем, который заблокирован другим процессом.

Попробуйте переместить один и тот же файл вручную в проводнике Windows и посмотрите, какие ошибки вы получаете, когда вы можете сделать это без проблем, ваше приложение, вероятно, тоже будет работать (при условии, что они работают под одной учетной записью).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...