Solved

determine if file changed

Posted on 2008-10-19
3
169 Views
Last Modified: 2010-04-30
I am trying to create a file backup, but only want to overwrite files that have changed
How can i do this without using FSO ?
0
Comment
Question by:isnoend2001
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
3 Comments
 
LVL 45

Accepted Solution

by:
aikimark earned 125 total points
ID: 22753884
you could use the file attribute to determine if the file has been modified and needs archiving.  to see this most easily, issue the following command:
DIR /AA

with XCOPY, this is the /A flag

========================
you can use the VB DIR() function to retrieve file names in a directory.  then you would concatenate the directory name and the file name as a parameter to the VB GetAttr() function.  see snippet example

Note:  If using the VB FileCopy statement, you will need to use the SetAttr statement to indicate you've created a backup.

strFilename = Dir(strPath & "*.*", vbNormal)
Do Until Len(strFilename) = 0
  FName = strPath & strFilename
  lngHasChanged = GetAttr(FName) And vbArchive
  If lngHasChanged = vbArchive Then
    ' create file backup
  End If
  strFilename = Dir
Loop

Open in new window

0
 
LVL 76

Assisted Solution

by:David Lee
David Lee earned 125 total points
ID: 22754034
Hi, isnoend2001.

You can use WMI.  A query like the one below will return all files that have their archive bit set.
On Error Resume Next
 
Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20
 
arrComputers = Array(".")
For Each strComputer In arrComputers
   WScript.Echo
   WScript.Echo "=========================================="
   WScript.Echo "Computer: " & strComputer
   WScript.Echo "=========================================="
 
   Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
   Set colItems = objWMIService.ExecQuery("SELECT * FROM CIM_DataFile WHERE Archive='True'", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly)
 
   For Each objItem In colItems
      WScript.Echo "AccessMask: " & objItem.AccessMask
      WScript.Echo "Archive: " & objItem.Archive
      WScript.Echo "Caption: " & objItem.Caption
      WScript.Echo "Compressed: " & objItem.Compressed
      WScript.Echo "CompressionMethod: " & objItem.CompressionMethod
      WScript.Echo "CreationClassName: " & objItem.CreationClassName
      WScript.Echo "CreationDate: " & WMIDateStringToDate(objItem.CreationDate)
      WScript.Echo "CSCreationClassName: " & objItem.CSCreationClassName
      WScript.Echo "CSName: " & objItem.CSName
      WScript.Echo "Description: " & objItem.Description
      WScript.Echo "Drive: " & objItem.Drive
      WScript.Echo "EightDotThreeFileName: " & objItem.EightDotThreeFileName
      WScript.Echo "Encrypted: " & objItem.Encrypted
      WScript.Echo "EncryptionMethod: " & objItem.EncryptionMethod
      WScript.Echo "Extension: " & objItem.Extension
      WScript.Echo "FileName: " & objItem.FileName
      WScript.Echo "FileSize: " & objItem.FileSize
      WScript.Echo "FileType: " & objItem.FileType
      WScript.Echo "FSCreationClassName: " & objItem.FSCreationClassName
      WScript.Echo "FSName: " & objItem.FSName
      WScript.Echo "Hidden: " & objItem.Hidden
      WScript.Echo "InstallDate: " & WMIDateStringToDate(objItem.InstallDate)
      WScript.Echo "InUseCount: " & objItem.InUseCount
      WScript.Echo "LastAccessed: " & WMIDateStringToDate(objItem.LastAccessed)
      WScript.Echo "LastModified: " & WMIDateStringToDate(objItem.LastModified)
      WScript.Echo "Manufacturer: " & objItem.Manufacturer
      WScript.Echo "Name: " & objItem.Name
      WScript.Echo "Path: " & objItem.Path
      WScript.Echo "Readable: " & objItem.Readable
      WScript.Echo "Status: " & objItem.Status
      WScript.Echo "System: " & objItem.System
      WScript.Echo "Version: " & objItem.Version
      WScript.Echo "Writeable: " & objItem.Writeable
      WScript.Echo
   Next
Next

Open in new window

0
 

Author Closing Comment

by:isnoend2001
ID: 31507609
Thanks guys
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction I needed to skip over some file processing within a For...Next loop in some old production code and wished that VB (classic) had a statement that would drop down to the end of the current iteration, bypassing the statements that were c…
There are many ways to remove duplicate entries in an SQL or Access database. Most make you temporarily insert an ID field, make a temp table and copy data back and forth, and/or are slow. Here is an easy way in VB6 using ADO to remove duplicate row…
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…

735 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question