作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有:
[SuppressUnmanagedCodeSecurity]
[DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool MoveFileWithProgress(
string lpExistingFileName, string lpNewFileName,
CopyProgressRoutine lpProgressRoutine,
int dwFlags);
public enum MoveFileOptions
{
MOVEFILE_COPY_ALLOWED = 0x2
}
并调用它:
if (!MoveFileWithProgress(source.FullName, destination.FullName, cpr, (int)options)) {
throw new IOException(new Win32Exception().Message);
}
其中:options
是 MoveFileOptions.MOVEFILE_COPY_ALLOWED
在硬盘驱动器中移动时它工作正常。但是当我尝试移动到闪存驱动器时,我得到:系统无法将文件移动到不同的磁盘驱动器
。
为什么?
最佳答案
您的 DllImport
不正确。你的函数只有 4 个参数,但是 real function有 5 个。大概发生的事情是 MOVEFILE_COPY_ALLOWED
被传递给 lpData
并被忽略。 dwFlags
参数就是恰好位于堆栈上的任何内容。
修复您的 p/invoke 可能会解决问题。此外,dwFlags
应该是无符号的。
[DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool MoveFileWithProgress(
string lpExistingFileName,
string lpNewFileName,
CopyProgressRoutine lpProgressRoutine,
IntPtr lpData,
uint dwFlags
);
如果正确,您需要决定将什么传递给 lpData
。由于您目前似乎没有使用它,所以这并不重要,IntPtr.Zero
似乎是显而易见的选择。
关于c# - MoveFileWithProgress 抛出 "The system cannot move the file to a different disk drive"– 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8609522/
我有: [SuppressUnmanagedCodeSecurity] [DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError
我是一名优秀的程序员,十分优秀!