Перетащите файл вложенного файла электронной почты в GroupWise в приложение .NET - PullRequest
4 голосов
/ 22 мая 2009

Я пытаюсь разрешить вложение из электронного письма, открытого в Novell GroupWise, в мое приложение C # WinForms. Стандартная функциональность .NET не работает.

В событии DragDrop элемента управления e.Data.GetFormats () возвращает следующее.

FileGroupDescriptorW
FileGroupDescriptor
FileContents
attachment format

Я могу получить имя файла с помощью e.Data.GetData ("FileGroupDescriptor") и перейти к позиции 76.

К сожалению, e.Data.GetData ("FileContents") вызывает первый шанс System.NotImplementedException в System.Windows.Forms.dll и возвращает ноль. Формат вложения также возвращает ноль.

Мой поиск говорит мне, что перетаскивание намного сложнее, чем я думал :) Кажется, что GroupWise может использовать формат CFSTR_FILECONTENTS, но это только предположение. Вложения можно успешно перетащить на рабочий стол Windows или в другие папки.

Спасибо за любые предложения.

1 Ответ

2 голосов
/ 29 мая 2009

Мне тоже не повезло найти это. Вот что я придумал (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);
}
...