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