我有一个问题我遇到了麻烦,希望这里有人可以提供帮助.
我们使用来自此OutlookDataObject项目的稍微修改过的代码来处理从各种邮件客户端(例如outlook)中删除的文件以及通过剪贴板对文件进行常规复制粘贴以处理它们并将它们保存到文件系统.
它在大多数情况下工作正常,但是如果用户使用Windows资源管理器打开ZIP文件,从那里复制文件并尝试添加它,我们会在FileContentDataObject的GetData方法的以下部分获得AccessViolationException:
//marshal the unmanaged memory to to FILEGROUPDESCRIPTORW struct
object fileGroupDescriptorObject = Marshal.PtrToStructure(fileGroupDescriptorWPointer, typeof(NativeMethods.FILEGROUPDESCRIPTORW));
Run Code Online (Sandbox Code Playgroud)
以下是相关代码的简化版本,您应该能够重现此问题:
// Starting Method
public void InsertFromClipboard()
{
FileContentDataObjectBase dataObject = GetDataObject();
if(dataObject!= null)
{
dataObject.SaveToFileSystem("C:/temp");
}
}
private FileContentDataObjectBase GetDataObject()
{
var dataObject = System.Windows.Forms.Clipboard.GetDataObject();
return new FileContentDataObject(System.Windows.Forms.Clipboard.GetDataObject());
}
public class FileContentDataObject : FileContentDataObjectBase
{
/// <summary>
/// Initializes a new instance of the <see cref="OutlookDataObject"/> class.
/// </summary>
/// <param name="underlyingDataObject">The underlying data object to wrap.</param>
public FileContentDataObject(System.Windows.Forms.IDataObject underlyingDataObject)
: …Run Code Online (Sandbox Code Playgroud)