从 GroupWise 中的电子邮件文件附件拖放到 .NET 应用程序

发布于 2024-07-20 06:10:26 字数 583 浏览 3 评论 0原文

我试图允许将在 Novell GroupWise 中打开的电子邮件中的附件放入我的 C# WinForms 应用程序中。 标准 .NET 功能不起作用。

在控件的 DragDrop 事件中,e.Data.GetFormats() 返回以下内容。

FileGroupDescriptorW
FileGroupDescriptor
FileContents
attachment format

我可以使用 e.Data.GetData("FileGroupDescriptor") 获取文件名并转到位置 76。

不幸的是,e.Data.GetData("FileContents") 会在 System.Windows.Forms.dll 中导致第一次出现 System.NotImplementedException ,并且返回空值。 附件格式也返回 null。

我的搜索告诉我,拖放比我想象的要复杂得多:) GroupWise 似乎可能使用一种名为 CFSTR_FILECONTENTS 的格式,但这只是一个猜测。 附件可以成功拖放到 Windows 桌面或其他文件夹中。

感谢您的任何建议。

I'm trying to allow an attachment from an email open in Novell GroupWise to be dropped into my C# WinForms application. The standard .NET functionality doesn't work.

In the DragDrop event of a control, e.Data.GetFormats() returns the following.

FileGroupDescriptorW
FileGroupDescriptor
FileContents
attachment format

I can get the filename with e.Data.GetData("FileGroupDescriptor") and going to position 76.

Unfortunately, e.Data.GetData("FileContents") causes a first chance System.NotImplementedException in System.Windows.Forms.dll and returns null. Attachment format also returns null.

My searches tell me that drag and drop is a lot more complex than I thought :) It seems like GroupWise might be using a format called CFSTR_FILECONTENTS but that's just a guess. The attachments can be successfully dragged and dropped onto the Windows desktop or other folders.

Thanks for any suggestions.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

段念尘 2024-07-27 06:10:26

我也没有运气找到这个。 这是我的想法(Groupwise 7):

private void control_DragDrop(object sender, DragEventArgs e)
{
   string strFilename = null;

   //something about the act of reading this stream creates the file in your temp folder(?)
   using (MemoryStream stream = (MemoryStream)e.Data.GetData("attachment format", true))
   {
       byte[] b = new byte[stream.Length];
       stream.Read(b, 0, (int)stream.Length);
       strFilename = Encoding.Unicode.GetString(b);
       //The path/filename is at position 10.
       strFilename = strFilename.Substring(10, strFilename.IndexOf('\0', 10) - 10);
       stream.Close();
   }

   if (strFilename != null && File.Exists(strFilename))
   {
      //From here on out, you're just reading another file from the disk...
      using(FileStream fileIn = File.Open(strFilename, FileMode.Open))
      {
          //Do your thing
          fileIn.Close();
      }
   }

   File.Delete(strFilename);
}

I had no luck finding this too. Here is what I came up with (Groupwise 7):

private void control_DragDrop(object sender, DragEventArgs e)
{
   string strFilename = null;

   //something about the act of reading this stream creates the file in your temp folder(?)
   using (MemoryStream stream = (MemoryStream)e.Data.GetData("attachment format", true))
   {
       byte[] b = new byte[stream.Length];
       stream.Read(b, 0, (int)stream.Length);
       strFilename = Encoding.Unicode.GetString(b);
       //The path/filename is at position 10.
       strFilename = strFilename.Substring(10, strFilename.IndexOf('\0', 10) - 10);
       stream.Close();
   }

   if (strFilename != null && File.Exists(strFilename))
   {
      //From here on out, you're just reading another file from the disk...
      using(FileStream fileIn = File.Open(strFilename, FileMode.Open))
      {
          //Do your thing
          fileIn.Close();
      }
   }

   File.Delete(strFilename);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文