- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个旧的 C++ 函数适用于 32 位操作系统,但不适用于 64 位操作系统。我想复制文件夹。你知道我必须改变什么吗?
************** Exception Text **************
System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
at WindowsApplication1.FolderCopy.SHFileOperation(SHFILEOPSTRUCT& lpFileOp)
at WindowsApplication1.FolderCopy.CopyFolder(String strSource, String strTarget)
at WindowsApplication1.Form1.Restore()
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
这是函数:
'Declaration of the API
Private Declare Function SHFileOperation Lib "shell32.dll" Alias _
"SHFileOperationA" (ByRef lpFileOp As SHFILEOPSTRUCT) As Integer
#End Region
Public Shared Function CopyFolder(ByVal strSource As String, ByVal strTarget As String) As Boolean
Dim _ShFile As New SHFILEOPSTRUCT
Dim lngUsedFlags As Long
lngUsedFlags = lngUsedFlags Or FO_Func.FOF_NOCONFIRMATION
lngUsedFlags = lngUsedFlags Or FO_Func.FOF_NOCONFIRMMKDIR
lngUsedFlags = lngUsedFlags Or FO_Func.FOF_NOCOPYSECURITYATTRIBS
lngUsedFlags = lngUsedFlags Or FO_Func.FOF_NOERRORUI
_ShFile.wFunc = FO_Func.FO_COPY
_ShFile.fFlags = lngUsedFlags
_ShFile.pFrom = strSource & vbNullChar
_ShFile.pTo = strTarget & vbNullChar
If SHFileOperation(_ShFile) = 0 Then
Return True
Else
Return False
End If
End Function
最佳答案
我认为问题出在 hNameMappings
字段上。该字段的 C 声明是 LPVOID hNameMappings ,它可能是 4 或 8 字节,具体取决于架构(32 位与 64 位)。我认为您需要为该字段使用 IntPtr
类型,因为 IntPtr
在 32 位中为 4 个字节,在 64 位中为 8 个字节。但是我不确定字符串字段会发生什么,因为这些指针在 64 位的情况下也会增长。但是您可以开始检查对 hNameMappings
字段使用 IntPtr
是否有效。
关于C++ SHFileOperation 64位操作系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40463208/
这个旧的 C++ 函数适用于 32 位操作系统,但不适用于 64 位操作系统。我想复制文件夹。你知道我必须改变什么吗? ************** Exception Text ******
我正在尝试使用 SHFileOperation 将文件从一个位置复制到另一个位置: SHFILEOPSTRUCT fileop; fileop.hwnd = 0; fileop.wFunc = FO_
我正在尝试将目录复制到新位置。所以我使用 SHFileOperation/SHFILEOPSTRUCT 如下: SHFILEOPSTRUCT sf; memset(&sf,0,sizeof(sf));
我正在为 WiX 编写一个 C++ 自定义操作,它将在安装期间调用以删除安装程序安装的任何残留物。考虑以下代码: UINT __stdcall DeleteResidue(MSIHANDLE hIns
我正在尝试通过 SHFileOperationA 复制文件夹功能。这是我的代码。 int main() { SHFILEOPSTRUCTA sf; int result; s
我正在使用 SHFileOperation() 从特定路径删除目录。它是在多个线程中完成的,删除的目录总是不同的。 有时,它会抛出异常: Exception thrown at 0x00007FF8A
我想要 一个后台线程将通过 SHFileOperation 函数复制文件,一次始终只有一个 SHFileOperation (但我希望它位于线程中)< 我需要 UI 输出,因此需要使用 FOF_SIM
我正在使用以下代码删除大量文件 function FastDelete(const fromDir: string): Boolean; var fos: TSHFileOpStruct; beg
我正在使用 Shell API 复制包含文件的文件夹。 SHFILEOPSTRUCT sf = {0}; sf.wFunc = FO_COPY; sf.hwnd = 0; sf.fFlags = FO
我正在尝试编写一个程序,该程序将使用 Windows API 根据日期删除一组与特定命名模式(通配符)匹配的文件/文件夹 ... SHFILEOPSTRUCT shFileOpStruct =
我有一段代码使用带有 FO_MOVE 操作的 Windows SHFileOperation 函数。指定的其他标志是 FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_
我使用这个程序: function MoveToRecycle(sFileName: widestring): Boolean; var fos: TSHFileOpStructW; begin
我有一个基于 MDI 的框架应用程序正在调用 SHFileOperation,如下所示: SHFILEOPSTRUCT opDelFiles = {0}; opDelFiles.hwnd = AfxG
我想删除一个文件到回收站。我使用这段代码。 SHFILEOPSTRUCT FileOp; FileOp.hwnd = NULL; FileOp.wFunc=FO_DELETE;
我正在使用以下函数将文件删除到回收站:(C++、MFC、Unicode) bool DeleteFileToPaperbasket (CString filename) { TCHAR Buff
我正在尝试将 A 驱动器的内容复制到文件夹 C:\test\disk1 中。文件夹 disk1 已经存在。该程序编译但运行时出现错误 87。我知道错误 87 与无效参数有关,但我不确定问题出在哪里。有
我找到了一些使用 SHFileOperation() 复制文件的代码,但我对 SHFILEOPSTRUCT structure 中可用的所有标志感到困惑. 这就是我正在做的事情。我有一个递归过程,根据
这会在桌面上创建一个新文件夹,但不会将文件夹 .pfrom 的内容 move 到文件夹 .pTo。 int main() { SHFILEOPSTRUCT sf = {0}; TCHA
我有一个涉及 SHFileOperation 的问题: SHFILEOPSTRUCT sf2; memset(&sf2,0,sizeof(sf2)); sf2.hwnd = N
我正在尝试使用 SHFileOperation 将文件/目录从一个位置复制到另一个位置。到目前为止,我的代码是, for(int index=0; index < clbSource.GetC
我是一名优秀的程序员,十分优秀!