Some Code that might help
First the module
Code: Select all
DeclareModule Backup
Declare Start(TopFromFolder.s,TopToFolder.s)
EndDeclareModule
Module Backup
Global TopFromFolder.s,TopToFolder.s
Global Folders.i = 0,Files.i = 0, CopyDone.i = 0
Global FromFolder.s,ToFolder.s,ProgressBar_0.i
Procedure CheckEvents()
Repeat
event = WindowEvent()
Delay(1)
Until Event = 0
EndProcedure
Procedure CountObjects(FromFolder.s)
Define ExamFolder.i ;Recursive so needs new each time procedure is run
Define TopFld.s = FromFolder ;Recursive so needs new each time procedure is run
ExamFolder = ExamineDirectory(#PB_Any, FromFolder, "*.*")
If ExamFolder > 0
While NextDirectoryEntry(ExamFolder)
If quit > 0
Break
EndIf
If DirectoryEntryType(ExamFolder) = #PB_DirectoryEntry_File
Files = Files + 1
Else
If DirectoryEntryName(ExamFolder) = "." Or DirectoryEntryName(ExamFolder) = ".."
;Ignore these
Else
FromFolder = TopFld + DirectoryEntryName(ExamFolder) + "\"
CountObjects(FromFolder)
Folders = Folders + 1
EndIf
EndIf
Wend
FinishDirectory(ExamFolder)
EndIf
EndProcedure
Procedure CopyObjects(FromFolder.s,ToFolder.s)
Define ExamFolder.i ;Recursive so needs new each time procedure is run
Define OldFile.s,NewFile.s
Define TopFld.s = FromFolder ;Recursive so needs new each time procedure is run
Define DestFolder.s = ReplaceString(TopFld, FromFolder, ToFolder)
ExamFolder = ExamineDirectory(#PB_Any, FromFolder, "*.*")
If ExamFolder > 0
While NextDirectoryEntry(ExamFolder)
If quit > 0
Break
EndIf
If DirectoryEntryType(ExamFolder) = #PB_DirectoryEntry_File
OldFile = TopFld + DirectoryEntryName(ExamFolder)
NewFile = ReplaceString(OldFile, topFromFolder, TopToFolder)
If GetFileDate(OldFile, #PB_Date_Modified) > GetFileDate(newfile, #PB_Date_Modified)
CopyDone = CopyDone + 1
CopyFile(OldFile, newfile)
EndIf
CheckEvents()
Else
If DirectoryEntryName(ExamFolder) = "." Or DirectoryEntryName(ExamFolder) = ".."
;Ignore these
Else
FromFolder = TopFld + DirectoryEntryName(ExamFolder) + "\"
destFolder = ReplaceString(FromFolder, TopFromFolder, TopToFolder)
CreateDirectory(destFolder)
CopyObjects(FromFolder,ToFolder)
EndIf
EndIf
Wend
SetGadgetState(ProgressBar_0,CopyDone)
FinishDirectory(ExamFolder)
EndIf
EndProcedure
Procedure Start(FromFolder.s,ToFolder.s)
TopFromFolder = FromFolder
TopToFolder = ToFolder
ThisWindow = OpenWindow(#PB_Any, 50, 50, 310, 70, "")
ProgressBar_0 = ProgressBarGadget(#PB_Any, 10, 10, 290, 20, 0, 0)
btnCancelCopy = ButtonGadget(#PB_Any, 210, 40, 90, 20, "Cancel")
Folders = 0
files = 0
CountObjects(TopFromFolder)
If quit > 0
MessageRequester("Count Cancelled","operation cancelled by user",#PB_MessageRequester_Ok)
Else
SetGadgetAttribute(ProgressBar_0, #PB_ProgressBar_Maximum , Folders + Files)
files = 0
CopyDone = 0
CopyObjects(TopFromFolder,TopToFolder)
If quit > 0
MessageRequester("Cancelled","Copy operation cancelled by user. Only " + Str(Files) + " Files Copied",#PB_MessageRequester_Ok)
Else
CloseWindow(ThisWindow)
MessageRequester("Finished",Str(CopyDone) + " Files Copied")
EndIf
EndIf
EndProcedure
EndModule
Now a small test prog
Code: Select all
EnableExplicit
IncludeFile "ModBackup.pb"
Global Window_0,Quit.i = 0
Global strFromFolder, btnBrowseFromFolder, strToFolder, btnBrowseToFolder, btnsmXcopy, btnDone
Define Event.i
Procedure GetFromFolder()
Define FromFolder.s
FromFolder = PathRequester("Select Folder To Copy", "C:\")
SetGadgetText(strFromFolder,FromFolder)
EndProcedure
Procedure GetToFolder()
;Define i.i
;For i = 1 To 1000
; SetGadgetState (ProgressBar_0, i)
;Next i
Define ToFolder.s
ToFolder = PathRequester("Select Folder To Copy To", "C:\")
SetGadgetText(strToFolder,ToFolder)
EndProcedure
Procedure Event_Handler(Event)
Select Event
Case #PB_Event_Menu
Select EventMenu()
EndSelect ;EventMenu()
Case #PB_Event_Gadget
Select EventGadget()
Case btnDone
End
Case btnBrowseFromFolder
GetFromFolder()
Case btnBrowseToFolder
GetToFolder()
Case btnsmXcopy
Backup::Start(GetGadgetText(strFromFolder),GetGadgetText(strToFolder))
EndSelect ;EventGadget()
EndSelect ;Event
EndProcedure
Window_0 = OpenWindow(#PB_Any, 10, 10, 380, 180, "", #PB_Window_SystemMenu)
TextGadget(#PB_Any, 20, 10, 90, 20, "From Folder")
strFromFolder = StringGadget(#PB_Any, 10, 40, 290, 20, "")
btnBrowseFromFolder = ButtonGadget(#PB_Any, 310, 40, 60, 20, "Browse")
GadgetToolTip(btnBrowseFromFolder, "Browse for From Folder")
TextGadget(#PB_Any, 20, 70, 90, 20, "To Folder")
strToFolder = StringGadget(#PB_Any, 10, 100, 290, 20, "")
btnBrowseToFolder = ButtonGadget(#PB_Any, 310, 100, 60, 20, "Browse")
btnsmXcopy = ButtonGadget(#PB_Any, 240, 140, 50, 20, "Copy")
btnDone = ButtonGadget(#PB_Any, 310, 140, 60, 20, "Done")
Repeat
Event = WaitWindowEvent()
Event_Handler(Event)
Until event = #PB_Event_CloseWindow
This just copies newer files you can easily add more xcopy functions if you wish.
Just a quick note this will also copy files to dropbox if you have access to a dropbox folder.
Any intelligent fool can make things bigger and more complex. It takes a touch of genius — and a lot of courage to move in the opposite direction.