以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]表事件修改的文件在文件监视器中无效?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=55048)

--  作者:xinqingok
--  发布时间:2014/8/9 16:53:00
--  [求助]表事件修改的文件在文件监视器中无效?
 表事件的datacolchanged:
FileSys.WriteAllText(ProjectPath & "日志\\操作记录.txt" , s , False, Encoding.UTF8)

      通过表事件的datacolchanged将修改过程通过以上代码记录到“操作记录.txt”中,窗体A中的B控件读取这个txt文件来显示操作的记录。为了实现记录的实时显示,之前我是在A窗体中打开计时器每隔10秒读一次“操作记录.txt”并写入B控件,后来发现这样很浪费资源,因为“操作记录.txt”并不是一直在改变的,只是当有操作的时候这个文件才会变才有去更新它的意义。
     
     现在我想通过文件监视器来实现这个功能,通过文件监视器监视这个名为“日志”的目录,当“操作记录.txt”发生改变时读取它写到A窗体B控件中,但是发现当人为打开“操作记录.txt”并手动修改保存时,可以正确在B控件中刷新,但是通过表事件做出的更改并不能触发B控件的刷新。
   
     求大神解答。
--  作者:有点甜
--  发布时间:2014/8/10 9:38:00
--  
 测试没有发现你这种问题,绝对是可以检测到修改的内容的。
--  作者:xinqingok
--  发布时间:2014/8/10 18:18:00
--  [求助]文件监视器事件给窗体控件赋值
有点甜大哥,感谢您的热心测试!
我又重新对项目进行了测试,发现当监视目录为本地目录时,确实可正常运行并检测到文件变化。但是当监视目录为局域网的主机时,则不能检测到文件变化,很奇怪的是当我手动对局域网上的文件修改并保存后,又能检测到文件的变化了。不知其为何故呢?


--  作者:有点甜
--  发布时间:2014/8/10 19:24:00
--  

测试局域网同样没有问题。

 

1、你的项目文件不能放在共享文件夹内,必须每台电脑都拷贝一份;

 

2、检测的路径要设置对,比如 \\\\helen\\共享文件夹

 

然后这样测试

 

FileSys.WriteAllText("\\\\helen\\共享文件夹\\操作记录.txt" , "tedfsdfdfst" , False, Encoding.UTF8)


--  作者:xinqingok
--  发布时间:2014/8/10 20:27:00
--  
以下是引用有点甜在2014-8-10 19:24:00的发言:

测试局域网同样没有问题。

 

1、你的项目文件不能放在共享文件夹内,必须每台电脑都拷贝一份;

 

2、检测的路径要设置对,比如 \\\\helen\\共享文件夹

 

然后这样测试

 

FileSys.WriteAllText("\\\\helen\\共享文件夹\\操作记录.txt" , "tedfsdfdfst" , False, Encoding.UTF8)

1,项目文件在本地。

2,检测路径也没错,因为我手动修改后被正确识别了。WriteAllText也没有错,因为我手动打开 操作记录.txt 看了,所有操作都被正确记录了。


问题是,表事件已经成功更改了txt文件,但是监视器没能触发。


图片点击可在新窗口打开查看


--  作者:有点甜
--  发布时间:2014/8/10 20:33:00
--  

首先一点,不可能不触发,剩下的自己去排查。

 

1、直接在命令窗口执行,红色代码改成你的共享文件夹的目录,内容你要动态的去改一下,反复测试 FileSys.WriteAllText("\\\\helen\\共享文件夹\\操作记录.txt" , "tedfsdfdfst" , False, Encoding.UTF8)

 

2、如果1可以出发,看你代码跟1有什么不同


--  作者:xinqingok
--  发布时间:2014/8/10 20:56:00
--  
以下是引用有点甜在2014-8-10 20:33:00的发言:

首先一点,不可能不触发,剩下的自己去排查。

 

1、直接在命令窗口执行,红色代码改成你的共享文件夹的目录,内容你要动态的去改一下,反复测试 FileSys.WriteAllText("\\\\helen\\共享文件夹\\操作记录.txt" , "tedfsdfdfst" , False, Encoding.UTF8)

 

2、如果1可以出发,看你代码跟1有什么不同

已经测试,在命令窗口执行后txt文件成功修改了,但是文件监视器的地方没有触发。。。我怕是工程文件的代码冲突,又重新新建了一个工程,同样的设置也是同样的情况,只有手动修改的文件才能被触发。但是换成是检测新生成文件后触发则能成功。。。


--  作者:有点甜
--  发布时间:2014/8/10 21:00:00
--  
 加QQ,发远程过来看看。2450314695
[此贴子已经被作者于2014-8-10 21:00:38编辑过]

--  作者:有点甜
--  发布时间:2014/8/10 22:43:00
--  
 不知为何,测试就是不检测修改,最后只能是删除再新增。