c# 文件夹监控 多线程发送流向 出错 帮忙看看
using System;using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;
using System.IO;
using System.Net.Mail;
using System.Net;
using System.Threading;
using System.Text.RegularExpressions;
namespace WindowsService1
{
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
}
string WatcherDirectory = "d:\\文件";
protected override void OnStart(string[] args)
{
using (System.IO.StreamWriter sw = new System.IO.StreamWriter("d:\\文件\\log.txt", true))
{
sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + "Start.");
}
}
protected override void OnStop()
{
using (System.IO.StreamWriter sw = new System.IO.StreamWriter("d:\\文件\\log.txt", true))
{
sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + "Stop.");
}
}
private void StartThread(object arg)
{
FileSystemEventArgs e = (FileSystemEventArgs)arg;
Sends(e);
}
private bool RegexMailValid(string str)
{
string match = @"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$";
if (Regex.IsMatch(str, match))
{
return true;
}
else
{
return false;
}
}
private void Sends(FileSystemEventArgs e)
{
try
{
string createdFileName = e.Name;
MailAddress from = new MailAddress("5105155@qq.com");
string toFileName = createdFileName.Substring(0,createdFileName.Length - 4);
if (RegexMailValid(toFileName) == false) {
using (System.IO.StreamWriter sw = new System.IO.StreamWriter("d:\\文件\\log.txt", true))
{
sw.WriteLine(e.Name + " 发送失败 名字错误");
}
return;
}
MailAddress to = new MailAddress(toFileName);
//log created file name and send mail.
//邮件主题、内容
MailMessage message = new MailMessage(from, to);
message.Subject = "流向";
message.SubjectEncoding = System.Text.Encoding.UTF8;//5-1-a-s-p-x
message.Body = "欢迎您";
message.BodyEncoding = System.Text.Encoding.UTF8;
//添加附件
Attachment attachFile = new Attachment(e.FullPath);
message.Attachments.Add(attachFile);
//大部分邮件服务器均加smtp.前缀
SmtpClient client = new SmtpClient("smtp." + from.Host);
SendMail(client, from, "aaaaaa", to, message);
}
catch(Exception ex)
{
using (System.IO.StreamWriter sw = new System.IO.StreamWriter("d:\\文件\\log.txt", true))
{
sw.WriteLine(e.Name +" 发送失败");
}
throw;
}
}
void PDFFileWatcher_Created(object sender, FileSystemEventArgs e)
{
try
{
Thread th = new Thread(new ParameterizedThreadStart(StartThread));
th.IsBackground = true;
th.Start(e);
}
catch (Exception ex) { }
}
//根据指定的参数发送邮件
private void SendMail(SmtpClient client, MailAddress from, string password, MailAddress to, MailMessage message)
{
//不使用默认凭证,注意此句必须放在client.Credentials的上面
client.UseDefaultCredentials = false;
//指定用户名、密码
client.Credentials = new NetworkCredential(from.Address, password);
//邮件通过网络发送到服务器
client.DeliveryMethod = SmtpDeliveryMethod.Network;
try
{
client.Send(message);
using (System.IO.StreamWriter sw = new System.IO.StreamWriter("d:\\文件\\log.txt", true))
{
sw.WriteLine( to+" 发送成功");
}
}
catch
{
using (System.IO.StreamWriter sw = new System.IO.StreamWriter("d:\\文件\\log.txt", true))
{
sw.WriteLine(to+" 发送失败");
}
throw;
}
finally
{
//及时释放占用的资源
message.Dispose();
}
}
}
}
c# --------------------编程问答-------------------- 随便把代码一贴,天知道你出什么错。
如果你觉得Windows服务不好调试,你可以按照sp1234说的那样首先在控制台环境中搭建一个简单的框架,把你的服务代码放进去运行,调试好了,再装入Windows服务,此时的错误基本上可以确定是权限路径配置一类的问题了。而代码本身的问题则已经被解决了。
补充:.NET技术 , C#