2016-08-04 15 views
0

ファイルをMailItem.Attachmentsに追加する方法は分かっていますが、ファイルが添付ファイルに既に追加されているかどうかを確認するにはどうすればよいですか?MailItem添付ファイル - 既にファイルが添付されているかどうかを確認します。

たとえば、ファイル名は"C:\\myFolder\\myFile.txt"です。このファイルが既に添付されているかどうかを確認するにはどうすればよいですか?新しい電子メールにファイルを二重に添付しないようにするには、これが必要です。ここで

は、私がこれまで持っているものです。

var mItem = Outlook.Interfaces.HostAddIn.Application.ActiveInspector().CurrentItem as MailItem; 

if (mItem != null) 
{ 
    //this works fine but I need to check if already attached first like below 
    //mItem.Attachments.Add(localFilePath); 

    bool found = false; 
    string attachments = ""; 
    for (int i = 1; i <= mItem.Attachments.Count; i++) 
    { 
     attachments += 
      "DisplayName: " + mItem.Attachments[i].DisplayName //shows just myFile.txt, no path 
      + "/FileName: " + mItem.Attachments[i].FileName //shows just myFile.txt, no path 
      + "/PathName: " + mItem.Attachments[i].PathName; //shows "" 

     //I tried here PathName, FileName, DisplayName but all return just name, without the path 
     if (mItem.Attachments[i].PathName == localFilePath) 
     { 
      found = true; 
     } 
    } 
    if (!found) 
    { 
     mItem.Attachments.Add(localFilePath); //attach only if not already attached 
    } 
} 

答えて

1

あなたが持っているあなたは何ができるか、かなりある - FileNameが一致する、PathNameは常に空になり、そしてDisplayNameFileNameと同じになります。

また、古いファイルサイズと既存のファイルサイズを比較することもできますが、Attachment.SizeにはMAPI指定のプロパティのサイズと実際のファイルデータのサイズが含まれているため使用しないでください。

また、Attachmeent.Type == olByValueを確認することを忘れないでください:通常の添付ファイルのみが必要です。

(ファイル名が一致する場合)既存の添付ファイルを一時フォルダ(Attachment.SaveAsFile)に保存し、ファイルサイズを比較することもできます。一致する場合は、コンテキストを比較することもできます(例:CRCを計算する)。

OOMだけを使用して添付ファイルデータに直接アクセスすることはできません。拡張MAPI(IAttach::OpenProperty(PR_ATTACH_DATA_BIN, IID_IStream, ...))または償還(Attachment.AsText/AsArray/etc)が必要です。そうでない場合は、Attachment.SaveAsFileを使用して、一時ファイルを削除する必要があります。

+0

ありがとうDmitry。パス+ファイル名だけをパス+ファイル名で確認する方法はありませんか?ファイルのパス+ fileNameを提供する添付ファイルにファイルを追加します。私はすでに添付ファイルから同じものを得ることができないと思います。 – pixel

+1

いいえ、パス情報は参照によって添付されていない限り保存されません。 MAPIレベルでは、ファイルは再生されません。データはIStreamとしてPR_ATTACH_DATA_BINプロパティに入ります。 –

+0

ありがとう、百万ドミトリー – pixel

関連する問題