2009-05-22 9 views
4

J'essaie d'autoriser l'ajout d'une pièce jointe d'un courrier électronique dans Novell GroupWise à mon application C# WinForms. La fonctionnalité standard .NET ne fonctionne pas.Glisser-déposer d'une pièce jointe d'un fichier e-mail dans GroupWise à une application .NET

Dans l'événement DragDrop d'un contrôle, e.Data.GetFormats() renvoie ce qui suit.

FileGroupDescriptorW 
FileGroupDescriptor 
FileContents 
attachment format 

je peux obtenir le nom du fichier avec e.Data.GetData ("FileGroupDescriptor") et aller à la position 76.

Malheureusement, e.Data.GetData ("fileContents") provoque un premier système de hasard .NotImplementedException dans System.Windows.Forms.dll et renvoie null. Le format de pièce jointe renvoie également null. Mes recherches m'indiquent que le glisser-déposer est beaucoup plus complexe que je ne le pensais :) Il semble que GroupWise utilise un format appelé CFSTR_FILECONTENTS, mais ce n'est qu'une supposition. Les pièces jointes peuvent être glissées avec succès sur le bureau Windows ou dans d'autres dossiers.

Merci pour vos suggestions.

+1

Content de savoir Je ne suis pas la seule âme pauvre à devoir travailler avec Groupwise. – rjrapson

Répondre

2

Je n'ai pas eu de chance de trouver ça aussi. Voici ce que je suis venu avec (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); 
} 
+0

Wow, merci John. C'est très cool et aussi un peu bizarre :-) Vous avez raison, simplement accéder à e.Data.GetData ("format de pièce jointe") (pas sûr si elle a même besoin de la, true) crée le fichier. D'une certaine façon, je pensais que cela revenait null avant, mais je dois avoir été confus. Merci encore. Salutations Ross – tetranz

+0

Ne fonctionnait pas pour moi malheureusement - GetData retourné null. – noelicus

Questions connexes