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

C# 为电子邮件中添加的每个附件命名,c#,C#,如果条件FileInfo.Exists为true,则我已成功将自动添加附件写入电子邮件,如下所示: if (filename.Exists) { message.Attachments.Add(new Attachment(path + @"\filefolder\filename.extension")); } 我有一系列的代码来附加许多附件;我的问题是如何给每个附件命名? 比如: if (filename.Exists) {

如果条件FileInfo.Exists为true,则我已成功将自动添加附件写入电子邮件,如下所示:

    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
    }
由于这些附件中有许多具有相同的name.extension,我想知道原始附件instad的相对名称,因为在我收到的电子邮件中有多个同名文件


感谢您的帮助。

修改您的代码以利用您已有的
FileInfo
对象,然后使用提取名称

var contentName = Path.GetFileNameWithoutExtension(filename); 
message.Attachments.Add(new Attachment(filename.FullName) { Name = contentName });
如果集合中有
FileInfo
对象,还可以进一步简化此过程。假设
文件
是一个
IEnumerable
,那么这个呢

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
enumerable投影为匿名类型,该匿名类型具有无扩展名和完整路径。循环枚举这些附件,并使用与之前相同的方法添加附件

不要仅仅因为标签以同一个字母开头就添加标签!一般来说,不要添加标签,因为你不知道它们的意思。对不起,输入错误。我没有注意到。我已经检查了许多解决方案,但这些解决方案没有给我带来满足我的目的的运气。这可能很好,但不幸的是,我需要为每个附件“指定一个我喜欢的名称”,因为许多附件具有相同的名称,但来自不同的目录。因此,也许另一个适合我的问题的方法是检索附件的路径,这样我就可以知道附件(可以与其他附件同名)来自何处。你的问题是如何为每个附件指定一个名称。我相信这回答了这个问题。您可以使用此示例代码,以及它根据您的喜好指定
ContentName
的点。