为电子邮件中添加的每个附件命名

时间:2016-02-07 14:59:47

标签: c#

如果条件FileInfo.Exists为真,我成功地将自动添加附件写入电子邮件:

    if (filename.Exists)
    {
        message.Attachments.Add(new Attachment(path + @"\filefolder\filename.extension"));

    }

我有一系列此代码可以附加许多附件;我的问题是如何为每个附件命名? 类似的东西:

    if (filename.Exists)
    {
        message.Attachments.Add(new Attachment(path + @"\filefolder\filename.extension"));
      //here i would like to write code to assign a different name for each attachment

    }
    if (filename2.Exists)
    {
        message.Attachments.Add(new Attachment(path + @"\filefolder2\filename2.extension"));
        //here i would like to write code to assign a different name for each attachment
    }

由于其中许多附件具有相同的名称。扩展我想知道原始附件的相对名称,在我收到的电子邮件中有多个具有相同名称的文件。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

修改代码以利用您已经拥有的FileInfo对象,然后使用Path.GetFileNameWithoutExtension()提取名称。

var contentName = Path.GetFileNameWithoutExtension(filename); 
message.Attachments.Add(new Attachment(filename.FullName) { Name = contentName });

如果集合中有FileInfo个对象,也可以进一步简化此操作。假设filesIEnumerable<FileInfo>,那么这个呢?

var attachments = files
    .Where(f => f.Exists)
    .Select(f => new
    {
        Path = f.FullName,
        ContentName = Path.GetFileNameWithoutExtension(f.FullName)
    });

foreach (var attachmentInfo in attachments)
{
    message.Attachments.Add(
        new Attachment(attachmentInfo.Path) { Name = attachmentInfo.ContentName });
}

第一行是一组LINQ运算符,它将FileInfo枚举为一个匿名类型,该类型具有无扩展名和完整路径。循环枚举这些并使用您以前使用的相同方法添加附件。