Foxtable(狐表)用户栏目专家坐堂 → 关于文件监视


  共有1792人关注过本帖树形打印复制链接

主题:关于文件监视

帅哥哟,离线,有人找我吗?
fvcfox
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:575 积分:5509 威望:0 精华:0 注册:2020/5/7 13:05:00
关于文件监视  发帖心情 Post By:2024/8/20 14:30:00 [只看该作者]

在文件监视,设置D:\aa
FileChanged发现一点问题
对EXCEL 97-2003的文件修改会执行,但对其他版本生成EXCEL的文件修改没执行。还有WORD的文件也不执行


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111414 积分:567140 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:575 积分:5509 威望:0 精华:0 注册:2020/5/7 13:05:00
  发帖心情 Post By: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

 回到顶部