一次文件监控问题处理

有个很老的代码,监控某个文件夹(filewatch),如果有后缀print文件,就去打印,打印完删除文件。

原本应该是vb生成文件,后来改成web,这个功能是一个小弟做的,整了几月都没搞定。

问题1,web会生成两个文件,一个是xml,一个是print,xml有的浏览器不会下载,而是直接在网页里打开。

其实直接在后台用stream输出就直接下载了,但是他是用js在前台下载的,prod环境就打开,dev就直接下载,看来是IIS配置问题,搜了搜,MIME Type,找到xml,原本是text,改成流就行,因为文本类型系统知道怎么打开,所以它会自作主张。

不过最好还是用C#代码来write流,这样不用改服务器。

问题2,edge没有反应

原本只监听文件的create事件,猜想有些浏览器触发的不是create事件,增加rename事件,解决。

问题3,firefox会报文件不存在,但是又能打印成功。

猜想事件触发了多次,增加一个字典,key是文件名,value是日期,重复的文件不处理,防止字典越来越大,需要删除过时数据。

                lock (locker) 
                {
                    if (fileDictionary.ContainsKey(e.Name))
                    {
                        return;
                    }

                    //删除之前的key
                    var list = fileDictionary.Keys.ToList();
                    foreach (var key in list)
                    {
                        DateTime dateTime = fileDictionary[key];
                        if (dateTime < DateTime.Now.AddMinutes(-5))
                        {
                            fileDictionary.Remove(key);
                        }
                    }

                    fileDictionary.Add(e.Name, DateTime.Now);
                }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值