+ -
当前位置:首页 → 问答吧 → 如何用VB监视文件的变动

如何用VB监视文件的变动

时间:2010-04-14

来源:互联网

请问用VB如何达到监视一个文件是否变动,如果变动,记录下变动的情况,希望有原码,谢谢!(后台工作类的)

作者: theround   发布时间: 2010-04-14

支持~!

作者: ivy999   发布时间: 2010-04-14

lz可能需要给出需要监视的具体内容

作者: fzx4936   发布时间: 2010-04-14

你所指的变动是什么意思?修改了内容?属性?还是?

作者: Veron_04   发布时间: 2010-04-14

也许我没有表达清楚,现在我有一个电脑工作运行自动生成的文档,它有事件时就在文档内自动改变。每天自动生成一个新的文档。我希望能看到除电脑自动改动外的人为原因,也就是说在有人为改动时就监视并记录下他所改的地方,不知道这样各位清楚了否?

作者: theround   发布时间: 2010-04-15

最简单的方式就是不断比对文件字节或者修改时间。API方式可以使用SHChangeNotify。
然后发现改动后,把上次载入内存的文件和本次文件比对即可得到不同处。

作者: a1875566250   发布时间: 2010-04-15

能不能写点具体的原码,谢谢!假设要比较的文件存放在c:\user\20040808.cvs

作者: theround   发布时间: 2010-04-15

引用 6 楼 theround 的回复:
能不能写点具体的原码,谢谢!假设要比较的文件存放在c:\user\20040808.cvs

c:\user\20040808.cvs建议写成类似ini配置文件的格式 这样比较容易按固定的项目来监控
至于是电脑自动改动还是人为原因恐怕很难区分了
代码应该不难吧
在Timer1_timer()里
定义若干个静态变量用来保存上次的内容
然后读入新的节点值来比较

有个问题需要考虑:因为要一直运行这个timer,interval设置的过大 恐怕会影响监视效果;过小系统资源消耗会过大.两难!

作者: fzx4936   发布时间: 2010-04-15

请问各位,有什么其它的办法么,当然是用VB前提下,我是才接触这个,就是楼上大哥说的代码,对我来说都有点难,希望各位指点指点。

作者: theround   发布时间: 2010-04-16

具体实现方法:
1、设计思路,并且确定某个文件的位置或者某些文件的存放位置,可以设计成记录集。或者监视全盘文件。
2、开始获取需记录文件的位置并且记录文件的属性、大小等,例如C:\1.TXT 的文件属性是只读的3K文件,那么可以在某个文件或数据库里进行记录。

  路径 文件属性 大小 ……
  C:\1.TXT 只读(1) 3K

3、定期或者时时扫描全盘文件,和获取时的数据进行对比,相同则PASS,不同则设置提示
4、其他功能随心情更变……
另外如果要监视文件内容是否变动的化,可以用抓取文件的修改时间进行对比的方法来实现。
具体代码没时间写,只提供思路了,如果楼主没有能力实现的化可以搜索下VB文件操作方面的书籍。
或者《VB入门与提高》一书

作者: xslslx   发布时间: 2010-04-16

我会努力去试试的,无论如何先谢谢在那儿.

作者: theround   发布时间: 2010-04-19

我现在努力做出了一个这个,请大家看看
问题:1,资源用的太多,一般是100%,怎么解决?
  2,我希望开机就能启用,应该如何改?
  3,希望在进程中稳形,如何做?
  4,如何中途退出此程序?
源码如下:
Public filename2 As String
Public breakit As Long

Public Sub Delay(HowLong As Date)
TempTime = DateAdd("s", HowLong, Now)
While TempTime > Now
DoEvents '让 windows 去处理其他事
Wend
End Sub

Private Sub Command1_Click()
Dim i As Long
 Dim n As Long
 Dim m As Long
 checkmod.Height = 1575
 m = 1

Do While Not (Command2.Value = True)
 floder ("d:\check")
 floder ("d:\check\filesystem")
 'creatnew (Text1)
 Call ini1
 creatnew (Text2)
 On Error Resume Next
 i = FileLen(Text1)
 n = FileLen(filename2)
 
If i = n Then
GoTo end2
ElseIf i < n Then
  FileCopy Text2, "d:\check\filesystem\" & Year(Date) & "0" & Month(Date) & Day(Date) & m & ".txt"
  Kill filename2
  FileCopy Text1, Text2
  m = m + 1
  
Else

  Kill filename2
  FileCopy Text1, Text2
end2:

 End If
 Delay (Text3)
 
 If m = 21 Then m = 1 '最多里面放20个文件

  If breakit = 1 Then GoTo end3

  Loop
end3:
End Sub

Private Sub Command2_Click()
On Error Resume Next
'breakit = 1
checkmod.Unload 'hiden
End Sub

Private Sub Form_Load()
Me.Icon = LoadPicture()

floder ("d:\check")
floder ("d:\check\filesystem")
Call ini1
creatnew (Text2)

'filename2 = Text2
End Sub

Private Sub Text1_LostFocus()
If Text1.Text = "" Then
MsgBox "Route source Null!", 32, "worning"
Text1.SetFocus
End If

'Text1.Enabled = False
Text2.SetFocus
End Sub
Private Sub creatnew(ByVal filename As String)
If Exists(filename) Then
GoTo End1
Else
Open filename For Output As #1
Close #1
End If
End1:
End Sub
Function Exists(filename As String)
On Error Resume Next
Dim i As Integer
i = Len(Dir$(filename))
If Err Or i = 0 Then Exists = False Else Exists = True
End Function

Private Sub ini1()
month1 = Month(Date)
If month1 < 10 Then
 Text1 = "c:\TCusers\log\" & Year(Date) & "0" & Month(Date) & Day(Date) & ".csv"
 
Else
 Text1 = "c:\TCusers\log\" & Year(Date) & Month(Date) & Day(Date) & ".csv"
End If
 Text2 = "d:\check\" & "syetem.txt"
End Sub
Private Sub Text2_LostFocus()
If Text2.Text = "" Then
MsgBox "Buffer path Null!", 32, "worning"
Text1.SetFocus
End If
filename2 = Text2
'Text2.Enabled = False
End Sub
Private Sub floder(ByVal flodername As String)
Dim obj As New FileSystemObject
If obj.FolderExists(flodername) = False Then
MkDir (flodername)
End If
Set obj = Nothing
End Sub
Private Sub Text3_LostFocus()
If Text.Text = "" Then
MsgBox "The check time is Null!", 32, "worning"
Text3.SetFocus
End If
'Text3.Enabled = False
End Sub

作者: theround   发布时间: 2010-04-22

咋没有人回呢,高些GG,JJ们,请给点指教啊.!

作者: theround   发布时间: 2010-04-23

要用Subclass/ Hook等高级技术去监视文件夹和注册表。不是你初学者做得了的。

作者: VBAdvisor   发布时间: 2010-05-06

引用 13 楼 vbadvisor 的回复:
要用Subclass/ Hook等高级技术去监视文件夹和注册表。不是你初学者做得了的。

谢谢你的帮忙,虽然是高级技术,但是能不能给点例子,让我来慢慢学习中完成呢.再高级的也应该能学吧.再次谢谢,能不能给点意见.对于 类模块和Hook只有一点点的了解,不知道你讲的是怎么实现.

作者: theround   发布时间: 2010-05-10

shell调用Filemon软件?

作者: zhao4zhong1   发布时间: 2010-05-10

有没有VB能解决的办法?谢谢

作者: theround   发布时间: 2010-05-14

我这里有一个例子,你下载后看一看
http://web.eastar-hk.com:808:/data/CESMIS/SHChangeNotifications.rar

作者: CHRL   发布时间: 2010-05-14

wmi

作者: chenhui530   发布时间: 2010-05-14

将监视信息写入文件,再用timer轮询。

作者: hyjavahy   发布时间: 2010-05-14

不愧是结贴率0%,这么久的帖子还不结帐.

作者: fzx4936   发布时间: 2010-05-14

作者: SilenceNet   发布时间: 2010-05-16

这个问题有点难,

作者: h5j2i6o3as9   发布时间: 2010-05-16

 
theround
 
(theround) 

等 级: 
结帖率:0.00% 

作者: ELIANRONG6   发布时间: 2011-10-25