joseLB Posted May 21, 2017 Share Posted May 21, 2017 (edited) Suppose you want from time to time to update a destination folder with new files that where created at a origin folder. It´s a kind of synchronization, where new files in origin must be "added" to destination. No worry about files that changed, just the new ones. The natural way: FileCopy ($originFolder & "\*.*" , $destinationFolder , $FC_NOOVERWRITE) After many tests, where I have 300 .jpg files in origin and no subfolders: If there is nothing at destination => OK, copy is done. Now destination has 300 files. If I erase at destination 10 files in the middle (explorer, shift del) and then filecopy => the 10 deleted files are NOT copied !! If I erase at destination 10 files "at the beginning"* (explorer, shift del) and then filecopy => the 10 deleted files are copied !! = OK !! * "at beginning" = sorted by name, ascending, erase the 10 first ones. ** I tried $originFolder & "\*.*" , $originFolder&"\" , $originFolder , and many other variants. The same for destination. So, what´s seems to me is that when FileCopy finds the first file from origin that exists at destination it stops to search. That´s expected behavior? Best Regards Jose Edited May 21, 2017 by joseLB Link to comment Share on other sites More sharing options...
LarsJ Posted May 22, 2017 Share Posted May 22, 2017 Check the returned value from FileCopy. Probably a file overwriting along with the $FC_NOOVERWRITE flag will cause the entire FileCopy command to fail (returns 0). If so, you'll have to copy the files one at a time in a loop so each file can fail without all the other files failing at the same time. joseLB 1 Controls, File Explorer, ROT objects, UI Automation, Windows Message MonitorCompiled code: Accessing AutoIt variables, DotNet.au3 UDF, Using C# and VB codeShell menus: The Context menu, The Favorites menu. Shell related: Control Panel, System Image ListsGraphics related: Rubik's Cube, OpenGL without external libraries, Navigating in an image, Non-rectangular selectionsListView controls: Colors and fonts, Multi-line header, Multi-line items, Checkboxes and icons, Incremental searchListView controls: Virtual ListViews, Editing cells, Data display functions Link to comment Share on other sites More sharing options...
joseLB Posted May 22, 2017 Author Share Posted May 22, 2017 (edited) Thanks Lars, unfortunatedly was what I supposed. That is, when FileCopy with "*" finds that a file exists at both folders, it stops. This is a Win XP behavior, as in explorer in win7 .. we can tell "do not overwrite for the "n" next conflicts. Anyway I´m developing FileSync (origin , destination) UDF for this case, but very simple. There I will _FileListToArray origin and destination and I check for each file in origin if it exists on destination. If not, plain FileCopy this file to destination. When I finish it, I´m thinking into put it at scripts forum. Bu it will be very simple anyway. Jose Edited May 22, 2017 by joseLB Link to comment Share on other sites More sharing options...
232showtime Posted May 22, 2017 Share Posted May 22, 2017 5 hours ago, joseLB said: as in explorer in win7 .. we can tell "do not overwrite for the "n" next conflicts. what are you talking about?, filecopy is working fine using $flag 0, even if i delete files in middle, or at the beginning or in the end. 5 hours ago, joseLB said: This is a Win XP behavior are you sure about this? how about showing your script? ill get to that... i still need to learn and understand a lot of codes Correct answer, learn to walk before you take on that marathon. Link to comment Share on other sites More sharing options...
joseLB Posted May 23, 2017 Author Share Posted May 23, 2017 (edited) On 22/05/2017 at 6:21 AM, 232showtime said: what are you talking about?, filecopy is working fine using $flag 0, even if i delete files in middle, or at the beginning or in the end. .... how about showing your script? Thanks 232showtime First, let I explain in another way so you understand what is going on: I have a folder "orig" with about 300 files at this moment, that grows 50 files a day aprox. I have a "dest" folder, where I need to do the backup each day. The files are something like I0001.jpg ... I0300.jpg , I0300 being the newest included. The natural choice was FileCopy ($orig\*.* , $dest ) ***$orig= "C:\......\, the same for $dest,"C:\...." To test: I did the first FileCopy, it was OK., the 300 files where copied to $dest So, I delete about 30 files at $dest, I0001.jpg to I0030.jpg again, FIleCopy -> it was OK, the 30 files "restored". Program working!!!! So, I deleted I0001... I0010, and I0100 to I0120. FileCopy restored just 10 files !!! I0001 to I0010.. I become lost at beginning, To make short a long bunch of tests: My guess is that FileCopy copies files UP to find the first $orig <-> $dest match. And then stops. This happens as Windows folders are internally ordered by filename, ascending order. So, if in $dest are missing the the "first" files (2 and 3 above), it will copy. On my case, as daily files will be I0301.jpg and so on, it will not work at all. In fact the script does not exist anymore, I developed my own FileSync UDF, very very simple, as follows. Near future I will increment it with checks , etc. Func FileSync ($origin, $destination) Local $Drv, $Dir,$File,$Ext, $destDrv, $destDir,$destFile,$destExt _PathSplit($origin, $Drv, $Dir,$File,$Ext) $origFileList= _FileListToArray( $Drv&$Dir, $File&$Ext, $FLTA_FILES, False) _PathSplit($destination, $destDrv, $destDir,$destFile,$destExt) $destFileList= _FileListToArray( $destDrv&$destDir, "*", $FLTA_FILES, False) If @error Then FileCopy ($origin , $destDrv&$destDir ) Else For $K=1 To $origFileList[0] $arq= $origFileList[$K] $x= _ArrayBinarySearch( $destFileList, $arq, 1) If $x = -1 Then FileCopy( $Drv&$Dir&$arq , $destDrv&$destDir ) EndIf Next EndIf EndFunc Edited May 23, 2017 by joseLB Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now