用FileSystemWatcher监控文件异常

zoe_firmament 2014-10-15 11:02:40
asp.net程序需要读取某一个文件夹中的所有txt文件,读取后把数据插入数据库,同时移出该txt文件,文件夹中的txt文件是随时增加的,用FileSystemWatcher类对该文件夹进行监视,如果文件增加则调用执行插入数据库和移出该文件的操作!但是,程序过程中遇到异常未抛出并直接退出系统,对同一批文件断点调试时发现产生异常的文件不确定,望请各位大侠大神指教,本菇凉大恩不言谢!

c#程序代码如下:
            FileSystemWatcher fsw = new FileSystemWatcher();
fsw.Path = ReadFilePath;
fsw.IncludeSubdirectories = false;
fsw.Filter = "*.txt";
fsw.NotifyFilter = NotifyFilters.FileName | NotifyFilters.DirectoryName | NotifyFilters.Size;
fsw.Created += new FileSystemEventHandler(this.fileSystemWatcher_EventHandle); //因为只需要对新增文件做处理,所以只添加了新增事件。
fsw.EnableRaisingEvents = true;

private void fileSystemWatcher_EventHandle(object sender, FileSystemEventArgs e)  
{

if (e.ChangeType == WatcherChangeTypes.Created)
{
SaveFileToDataBase();
}
}

 private void SaveFileToDataBase()
{
DirectoryInfo TheFolder = new DirectoryInfo(ReadFilePath);
string pgd_vou_no = "", do_date = "", do_time = "", opr_usr_id = "", MTID = "", SN = "", PBcount = "", OK_flag = "";
string fileName = "", bakfile = "";
foreach (FileInfo NextFile in TheFolder.GetFiles())
{
fileName = NextFile.Name.ToString().Trim();
fileName = fileName.Substring(fileName.Length - 16, 12);
StreamReader sr = new StreamReader(NextFile.FullName, Encoding.Default);
string OneLineTxt;
int i = 0;
while ((OneLineTxt = sr.ReadLine()) != null)
{
i++;
string[] SplitTxt = OneLineTxt.Split(new char[] { ',' });
pgd_vou_no = SplitTxt[0].Trim();
do_date = SplitTxt[1].Trim();
do_time = SplitTxt[2].Trim();
//do_time = SplitTxt[1].Trim() + " " + SplitTxt[2].Trim();
opr_usr_id = SplitTxt[3].Trim();
MTID = SplitTxt[4].Trim();
SN = SplitTxt[5].Trim();
PBcount = SplitTxt[6].Trim();
OK_flag = SplitTxt[7].Trim();

string up_date = " m_item_stock_no='" + fileName.Trim() + "',ok_flag='" + OK_flag + "',do_time='" + do_time + "',usr_id='" + opr_usr_id.Trim() + "',PBcount='" + PBcount.Trim() + "',MTID='" + MTID + "'";
try
{
string up_flag = srv2.One_line_update("gl_MES_SMT_print", up_date, new string[] { "com_id", "vou_no", "item_stock_no" }, new string[] { cmps, pgd_vou_no, SN }, "update", "3");
}
catch (Exception ee)
{
MessageBox.Show(ee.ToString().Trim());
}
}
sr.Dispose();
bakfile = BakFilePath + "\\" + NextFile.Name;
if (File.Exists(bakfile))
{
File.Delete(bakfile);
}
NextFile.MoveTo(bakfile);
}
}


调试文件如图:

调试文件内容:20141000174310,2014/10/14,11:30:05,WYM,MLM33001,SH20137100000016,1,OK
20141000174310,2014/10/14,11:35:05,WYM,MLM33001,SH20137100000017,2,OK
20141000174310,2014/10/14,11:40:05,WYM,MLM33001,SH20137100000018,3,OK
20141000174310,2014/10/14,11:46:05,WYM,MLM33001,SH20137100000019,4,OK

因为程序处于测试阶段,各txt文件的内容全部一样。根据断点调试,有时0007文件跳出,有时0009文件跳出。
...全文
120 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
gxingmin 2014-10-15
  • 打赏
  • 举报
回复
最后sr没有Close 你在SaveFileToDataBase函数外加个try catch,然后将错误日志打印出来,看看提示什么?

8,834

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 组件/控件开发
社区管理员
  • 组件/控件开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧