以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 关于文件监视 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=193133) |
-- 作者:fvcfox -- 发布时间:2024/8/20 14:30:00 -- 关于文件监视 在文件监视,设置D:\\aa 在FileChanged发现一点问题 对EXCEL 97-2003的文件修改会执行,但对其他版本生成EXCEL的文件修改没执行。还有WORD的文件也不执行 |
-- 作者:有点蓝 -- 发布时间:2024/8/20 15:41:00 -- 这种没有办法,新版office文件比较特殊,理论上就是一个压缩包,把后缀名改为zip就可以看出来。 跟踪xlsx文件的使用就可以看到,首先文件打开后,会创建一些隐藏的临时文件,然后后续的操作都是先对临时文件进行处理,然后在使用过程中execl进程会一直锁定这些文件,导致其它程序无法使用,也就无法判断。 下面是一些操作记录,可以看到保存时操作的是一些临时文件,而文件名称都是随机值,没有办法判断原来是什么文件 FileCreated=D:\\aa\\test.xlsx \'新建一个文件时触发 FileCreated=D:\\aa\\~$test.xlsx \'打开文件时触发 FileDeleted=D:\\aa\\F4D08871.tmp \'保存时触发 FileCreated=D:\\aa\\70526340 \'保存时触发 |
-- 作者:fvcfox -- 发布时间:2024/8/20 16:09:00 -- 目前我是使用如下方法判断文件的修改情况的,但有个缺点就是占内存 If DataTables("dbupdate").DataRows.Count > 0 Then For Each dr As DataRow In DataTables("dbupdate").DataRows System.Threading.Thread.Sleep(500) Dim tb As Table = Tables(dr("所在表")) Dim ifo As New FileInfo(dr("nf")) dr("更新时间") = cstr(ifo.LastWriteTime) If FileisOpened(dr("nf")) = False Then If FileOpened(dr("nf")) = False Then If dr("更新时间") > dr("登记时间") And dr("不上传") = False Then Try tb.DataTable.ReplaceFor ("文件时间" , CStr(ifo.LastWriteTime), "服务器文件名=\'" & dr("服务器文件名") & "\'") If ftp1.Upload (dr("nf"), dr("类别") & dr("服务器文件名"), True) = True Then tb.DataTable.ReplaceFor ("不上传" , False , "服务器文件名=\'" & dr("服务器文件名") & "\'") End If dr.Delete DataTables("dbupdate").Save Catch ex As Exception End Try ElseIf dr("更新时间") = dr("登记时间") Then dr.Delete DataTables("dbupdate").Save End If End If End If Next Else MyTimers("监视flup").Enabled = False End if |