Outlook のメールをコピーしてフォームに貼り付けようとしています。貼り付け操作を実行するたびに、Outlook メール (MSG ファイル) が何らかのディレクトリに保存されるはずであり、以下に示すようにいくつかのコードを実装しました。
private void OutlookMailCopyPaste_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control && e.KeyCode == Keys.V)
{
if (Clipboard.ContainsData("FileGroupDescriptor"))
{
if (Clipboard.ContainsData("FileGroupDescriptorW"))
{
Stream fileStream = (Stream)Clipboard.GetData("FileGroupDescriptor");
byte[] fileGroupDescriptor = new byte[fileStream.Length];
fileStream.Read(fileGroupDescriptor, 0, fileGroupDescriptor.Length);
fileStream.Close();
System.Text.StringBuilder fileName = new System.Text.StringBuilder("");
for (int i = 76; i < fileGroupDescriptor.Length; i++)
{
fileName.Append(Convert.ToChar(fileGroupDescriptor[i]));
}
//fileGroupDescriptor = Encoding.Convert(Encoding.GetEncoding("iso-8859-1"), Encoding.UTF8, fileGroupDescriptor);
//string tempString = Encoding.UTF8.GetString(fileGroupDescriptor, 0, fileGroupDescriptor.Length);
string tempString = fileName.ToString().Substring(fileName.ToString().IndexOf('.'));
if (tempString.ToUpper().StartsWith(".MSG"))
{
if (Clipboard.ContainsData("FileContents"))
{
MemoryStream[] filestreams = (MemoryStream[])Clipboard.GetData("FileContents");
if (filestreams != null && filestreams.Length > 0)
{
MemoryStream filestream = filestreams[0];
//save the file stream using its name to the application path
FileStream outputStream = File.Create(fileName.ToString());
filestream.WriteTo(outputStream);
outputStream.Close();
}
}
}
else
{
MessageBox.Show("Please copy and paste MSG file only.");
}
}
}
}
}
クリップボードのデータをメモリ ストリームに読み込むたびに、「プログラムの実行を続行するにはメモリが不足しています」などの例外が発生します。行で
MemoryStream[] filestreams = (MemoryStream[])Clipboard.GetData("FileContents");
さらに、この行の前にデータがあるかどうかを確認していますが、Clipboard.GetData("FileContents") に null があります
if (Clipboard.ContainsData("FileContents"))
よろしくお願いいたします。 ラメシュ・モラサ