在文件监视,设置D:\aa在FileChanged发现一点问题
对EXCEL 97-2003的文件修改会执行,但对其他版本生成EXCEL的文件修改没执行。还有WORD的文件也不执行
这种没有办法,新版office文件比较特殊,理论上就是一个压缩包,把后缀名改为zip就可以看出来。
跟踪xlsx文件的使用就可以看到,首先文件打开后,会创建一些隐藏的临时文件,然后后续的操作都是先对临时文件进行处理,然后在使用过程中execl进程会一直锁定这些文件,导致其它程序无法使用,也就无法判断。
下面是一些操作记录,可以看到保存时操作的是一些临时文件,而文件名称都是随机值,没有办法判断原来是什么文件
FileCreated=D:\aa\test.xlsx '新建一个文件时触发
FileCreated=D:\aa\~$test.xlsx '打开文件时触发
FileDeleted=D:\aa\F4D08871.tmp '保存时触发
FileCreated=D:\aa\70526340 '保存时触发
目前我是使用如下方法判断文件的修改情况的,但有个缺点就是占内存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