wpf アプリケーションで電子メール (eml ファイル) をドロップすることについて質問があります。私の問題は、アプリケーションが eml ファイルを保存していることですが、それを開くと、Tobit 電子メール クライアントに空のメールが表示されることです。デスクトップにドロップして開くと、完璧に機能します。画像やテキスト ファイルなどの他のファイルも同様に機能します。
いつも助けてくれてありがとう。
これが私のコードです:
private void listViewDocumentsSA_Drop(object sender, DragEventArgs e)...
string[] format = e.Data.GetFormats();
System.Windows.DataObject obj = (System.Windows.DataObject)e.Data;
Object item = (object)e.Data.GetData(typeof(System.String));
try
{
string[] fileNames = null;
string dir = System.Configuration.ConfigurationSettings.AppSettings["dir"];
if (!Directory.Exists(dir))
Directory.CreateDirectory(dir);
string filename = "";
if (e.Data is System.Windows.DataObject && ((System.Windows.DataObject)e.Data).ContainsFileDropList())
{
foreach (string filePath in ((System.Windows.DataObject)e.Data).GetFileDropList())
{
filename = dir + "test" + "$" + System.DateTime.Now.Ticks.ToString() + "$" + System.IO.Path.GetFileName(filePath);
filename = filename.Replace("\\\\", "\\");
File.Copy(filePath, filename, false);
}
}
if (e.Data.GetDataPresent("FileGroupDescriptor"))
{
Stream theStream = (Stream)e.Data.GetData("FileGroupDescriptor");
byte[] fileGroupDescriptor = new byte[512];
theStream.Read(fileGroupDescriptor, 0, 512);
StringBuilder fileName = new StringBuilder("");
for (int i = 76; fileGroupDescriptor[i] != 0; i++)
{
fileName.Append(Convert.ToChar(fileGroupDescriptor[i]));
}
theStream.Close();
string path = dir + "test" + "$" + System.DateTime.Now.Ticks.ToString() + "$";
path = path.Replace("\\\\", "\\");
string theFile = path + fileName.ToString();
if (e.Data.GetDataPresent("FileContents", false))
{
string[] formats = e.Data.GetFormats();
MemoryStream ms = e.Data.GetData("FileGroupDescriptorW") as MemoryStream;
byte[] fileBytes = new byte[ms.Length];
ms.Position = 0;
ms.Read(fileBytes, 0, (int)ms.Length);
FileStream fs = new FileStream(theFile, FileMode.Create);
fs.Write(fileBytes, 0, (int)fileBytes.Length);
fs.Close();
}
else
throw new System.Exception("...");
}
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}