在VB.NET中获取从电子邮件附件复制到剪贴板的文件名称

4
如果用户从 Outlook 邮件附件中复制文件到 Windows 剪贴板,有没有办法在 VB.NET 中获取该文件的名称?
如果文件是从 Windows Explorer 复制的,则 Clipboard.GetFileDropList 具有可用于获取此信息的数据,但是当从电子邮件附件复制文件时,该列表为空(只有四个可用格式 - FileGroupDescriptorWFileGroupDescriptorRenPrivateItemFileContents)。
感觉应该可以实现这一点,因为我可以将文件粘贴到 Windows Explorer 中,并带有附件的名称。
1个回答

5

原来,您可以从数据对象中获取文件名,其格式为FileGroupDescriptor。不过,代码有点晦涩难懂:

Dim fileName As New StringBuilder("")
Dim theStream As Stream = Clipboard.GetData("FileGroupDescriptor")
Try
    Dim fileGroupDescriptor(512) As Byte
    theStream.Read(fileGroupDescriptor, 0, 512)

    Dim i As Integer = 76
    While fileGroupDescriptor(i) <> 0
        fileName.Append(Convert.ToChar(fileGroupDescriptor(i)))
        i += 1
    End While
Finally
    If theStream IsNot Nothing Then theStream.Close()
End Try

Clipboard.GetDataObject().GetFormats()会返回IDataObject中所有可用数据格式。 - SliverNinja - MSFT
不错。如果您还需要将附件提取到文件中,请访问此处:http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/affcf9cd-704d-4ea2-b80b-4c09062af72d - Andrea Antonangeli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接