如何使用MoveFileEx APi在C盘中移动文件

时间:2010-06-07 09:53:27

标签: visual-c++

当我使用MoveFileEx在C盘中移动文件时,但是我得到了ACCESS DENIED的ERROR。任何解决方案

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 :(得分:0)

您需要确保您的进程运行的用户帐户具有对正在移动的文件的读访问权限,并且可以写入对其写入位置的访问权限。并且正在移动的文件未被另一个进程锁定,并且目标目录中没有被另一个进程锁定的同名文件。

尝试在Windows资源管理器中手动移动相同的文件,看看你得到了什么错误,什么时候可以做到这一点,你的应用程序可能也会有效(假设它们在同一个帐户下运行)。

答案 1 :(得分:0)

是你问题中贴出的真实代码???

如果是这样,那么您的文件名就会出现问题。 \是C和C ++字符串中的转义字符,如果您想在结果字符串中使用真正的\字符,它应该加倍。

所以你应该是:

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

另外,^不是C和C ++中的有效字符,它仅对在Pascal中定义指针有效。我怀疑你的代码是用Pascal编写的,但是我不确定上面关于字符串中的转义字符的说法是否在Pascal中有效......