Arrastrar y soltar desde un archivo adjunto de correo electrónico de GroupWise a una aplicación .NET

StackOverflow https://stackoverflow.com/questions/896197

Pregunta

Estoy tratando de permitir que un archivo adjunto de un correo electrónico abierto en Novell GroupWise que se dejó caer en mi aplicación C # WinForms. La funcionalidad estándar de .NET no funciona.

En el caso DragDrop de un control, e.Data.GetFormats () devuelve la siguiente.

FileGroupDescriptorW
FileGroupDescriptor
FileContents
attachment format

puedo obtener el nombre de archivo con e.Data.GetData ( "FileGroupDescriptor") e ir a la posición 76.

Por desgracia, e.Data.GetData ( "FileContents") provoca una primera oportunidad en System.NotImplementedException System.Windows.Forms.dll y devuelve un valor nulo. Formato de archivo adjunto también devuelve un valor nulo.

Mis búsquedas me dicen que arrastrar y soltar es mucho más complejo de lo que pensaba :) Parece que GroupWise podría estar utilizando un formato llamado CFSTR_FILECONTENTS pero eso es sólo una conjetura. Los archivos adjuntos se pueden arrastrar con éxito y se dejó caer en el escritorio de Windows o en otras carpetas.

Gracias por cualquier sugerencia.

¿Fue útil?

Solución

No tuve suerte de encontrar este también. Esto es lo que ocurrió con (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);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top