Перетащите вложенный файл электронной почты в GroupWise в приложение .NET.
-
23-08-2019 - |
Вопрос
Я пытаюсь разрешить перетаскивание вложения из электронного письма, открытого в 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 и возвращает значение null.Формат вложения также возвращает ноль.
Мои поиски показывают, что перетаскивание намного сложнее, чем я думал :) Похоже, что GroupWise может использовать формат CFSTR_FILECONTENTS, но это всего лишь предположение.Вложения можно успешно перетащить на рабочий стол Windows или в другие папки.
Спасибо за любые предложения.
Решение
Мне тоже не удалось это найти.Вот что у меня получилось (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);
}