Solved

determine if file changed

Posted on 2008-10-19
3
164 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
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

Master Your Team's Linux and Cloud Stack!

The average business loses $13.5M per year to ineffective training (per 1,000 employees). Keep ahead of the competition and combine in-person quality with online cost and flexibility by training with Linux Academy.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
I need help formating a date variable in my VB.Net application 2 53
Add a task in Outlook from access 11 39
Child Form in front 4 47
RUNRMTCMD from AS/400 12 47
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…
Most everyone who has done any programming in VB6 knows that you can do something in code like Debug.Print MyVar and that when the program runs from the IDE, the value of MyVar will be displayed in the Immediate Window. Less well known is Debug.Asse…
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…
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…

810 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