determine if file changed

Posted on 2008-10-19
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 ?
Question by:isnoend2001
LVL 45

Accepted Solution

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:

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


Open in new window

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 "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




Open in new window


Author Closing Comment

ID: 31507609
Thanks guys

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

Suggested Solutions

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…
The debugging module of the VB 6 IDE can be accessed by way of the Debug menu item. That menu item can normally be found in the IDE's main menu line as shown in this picture.   There is also a companion Debug Toolbar that looks like the followin…
As developers, we are not limited to the functions provided by the VBA language. In addition, we can call the functions that are part of the Windows operating system. These functions are part of the Windows API (Application Programming Interface). U…
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…

861 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

Need Help in Real-Time?

Connect with top rated Experts

25 Experts available now in Live!

Get 1:1 Help Now