Sub Main()
Try
Dim output, filename1, filename2, filename3, date1, date2 As String
'today's final
output += "Report Dates: " & date1 & " and " & date2
filename1 = "filename1.doc"
SaveToFile(output, filename1)
'today's daily
output = "Report Dates: " & date1 & " and " & date2
filename2 = "filename2.doc"
SaveToFile(output, filename2)
'yesterday's final
output = "Report Dates: " & date1 & " and " & date2
filename3 = "filename3.doc"
SaveToFile(output, filename3)
'email files here
SendEmail(to, body,date1);
'detele temp files
DeleteFile(filename1)
DeleteFile(filename2)
DeleteFile(filename3)
Catch e As Exception
cEmail.SendErrorEmail("me@hme.com", e.Message)
End Try
End Sub
Sub SaveToFile(ByVal text As String, ByVal fileName As String)
Dim path As String = "c:\temp\" & fileName
Try
If File.Exists(path) = True Then
File.Delete(path)
End If
' Create a file to write to.
Dim sw As StreamWriter = File.CreateText(path)
sw.WriteLine(text)
sw.Flush()
sw.Close()
' Open the file to read from.
Dim sr As StreamReader = File.OpenText(path)
Do While sr.Peek() >= 0
Console.WriteLine(sr.ReadLine())
Loop
sr.Close()
Catch e As Exception
message = "in SaveToFile " & e.Message
cEmail.SendErrorEmail("me@hme.com", message)
End Try
End Sub
Sub DeleteFile(ByVal fileName As String)
Dim path As String = "c:\temp\" & fileName
Try
If File.Exists(path) = True Then
File.Delete(path)
End If
Catch e As Exception
message = "in DeleteFile " & e.Message
cEmail.SendErrorEmail("me@hme.com", message)
End Try
End Sub
我收到以下错误:
DeleteFile中的我应该在删除文件之前释放任何进程吗?我错过了什么?进程无法访问该文件 'c:\ temp \ filename2.doc'因为它正由另一个进程使用。
编辑:这是我发送文件的“发送电子邮件”功能
Public Sub SendEmail(ByVal msgTo As String, ByVal msgBody As String, ByVal date1 As String)
Dim mail As New MailMessage()
Dim objSMTP As New SmtpClient()
Dim filename As String
''''''''''''''''''''''''''''''''''''''
Try
mail.To.Add(msgTo)
mail.Bcc.Add("me@hme.com")
mail.Priority = MailPriority.Normal
mail.IsBodyHtml = True
mail.Subject = "subject"
mail.Body = msgBody
filename = "filename1.doc"
Dim DOERecords As New Net.Mail.Attachment("C:\temp\" & filename) 'create the attachment
filename = "filename2.doc"
Dim FOERecords As New Net.Mail.Attachment("C:\temp\" & filename) 'create the attachment
filename = "filename3.doc"
Dim FOERecords2 As New Net.Mail.Attachment("C:\temp\" & filename) 'create the attachment
mail.Attachments.Add(DOERecords) 'add the attachment
mail.Attachments.Add(FOERecords) 'add the attachment
mail.Attachments.Add(FOERecords2) 'add the attachment
objSMTP.Send(mail)
Catch ex As Exception
Throw ex
End Try
End Sub
答案 0 :(得分:2)
您需要处置所有附件对象,否则您将留下打开的文件句柄。 您只需在MailMessage上调用Dispose即可。这将触发对任何附件的处置。
objSMTP.Send(mail)
mail.Dispose()
如果使用Using
语句
Using(mail as MailMessage = New MailMessage())
....
End Using
答案 1 :(得分:1)
我会在你使用文件的地方添加一些用法:
Using sw As StreamWriter = File.CreateText(path)
sw.WriteLine(text)
sw.Flush()
sw.Close()
End Using
' Open the file to read from.
Using sr As StreamReader = File.OpenText(path)
Do While sr.Peek() >= 0
Console.WriteLine(sr.ReadLine())
Loop
sr.Close()
End Using
usings负责处理流对象实现的IDisposable接口。它将取消分配文件的锁。
邮件对象应该实现相同的模式:
Using mail As New MailMessage()
....
End Try
End Using