如果条件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
}
由于其中许多附件具有相同的名称。扩展我想知道原始附件的相对名称,在我收到的电子邮件中有多个具有相同名称的文件。
感谢您的帮助。
答案 0 :(得分:0)
修改代码以利用您已经拥有的FileInfo
对象,然后使用Path.GetFileNameWithoutExtension()提取名称。
var contentName = Path.GetFileNameWithoutExtension(filename);
message.Attachments.Add(new Attachment(filename.FullName) { Name = contentName });
如果集合中有FileInfo
个对象,也可以进一步简化此操作。假设files
是IEnumerable<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
枚举为一个匿名类型,该类型具有无扩展名和完整路径。循环枚举这些并使用您以前使用的相同方法添加附件。