On Mon, 25 Aug 2014 22:28:29 +0200 Julio Sanchez <jusabejus...@gmail.com> wrote:
> Hi, could you add a new order within gambas3 to copy directories > recursively. > (snippped) Here's my version, slightly different to Tobi's. I find that it is better to provide an array of all the paths in the source tree and then iterate through it as you have more control over what is and is not copied. For example, in the following code I ignore all the svn control files. ' Gambas module file ''' This module provides some generalised methods for handling files. Export Public Function MoveFile(source As String, dest As String, Optional overwrite As Boolean = False) As Boolean '' Move a file specified by the source path to the dest dir. If overwrite is specified and is true '' then an existing file of the same name in the dest dir will be overwritten (read deleted and replaced). Dim sourcedir As String Dim sourcefile As String sourcefile = File.Name(source) sourcedir = File.Dir(source) If sourcedir = dest Then Error.Raise("Source and destination directories are the same") 'First check if file exists If Exist(source) Then 'Now check if copyto directory exists If Not (Exist(dest)) Then Mkdir dest Endif 'Now check if file exists If Exist(dest &/ sourcefile) Then If overwrite Then Kill dest &/ sourcefile Else Error.Raise("File already exists in destination dir") Endif Endif Move source To dest &/ sourcefile Else Error.Raise("Source file for move does not exist") Endif Return True Catch Print Subst$("Err (&2) occurred at &4 : &1.", Error.Text, Error.Code, Error.Backtrace.Join("\n"), Error.Where) Return False End Public Function CopyFile(source As String, dest As String, Optional overwrite As Boolean = False) As Boolean '' Copies a file specified by the source path to the dest dir Dim sourcedir As String Dim sourcefile As String sourcefile = File.Name(source) sourcedir = File.Dir(source) If sourcedir = dest Then Error.Raise("Source and destination directories are the same") 'First check if file exists If Exist(source) Then 'Now check if copyto directory exists If Not (Exist(dest)) Then Mkdir dest Endif 'Now check if file exists If Exist(dest &/ sourcefile) Then If overwrite Then Kill dest &/ sourcefile Else Error.Raise("File already exists in destination dir") Endif Endif Copy source To dest &/ sourcefile Else Error.Raise("Source file for copy does not exist") Endif Return True Catch Print Subst$("Err (&2) occurred at &4 : &1.", Error.Text, Error.Code, Error.Backtrace.Join("\n"), Error.Where) Return False End Public Function RecDir(root As String, rootext As String, pattern As String, filter As Integer) As String[] Dim wkrtn As New String[] Dim sdirs As New String[] Dim sd As String Dim item As String wkrtn = Dir(root &/ rootext, pattern, filter) sdirs = Dir(root &/ rootext, "*", gb.Directory) For Each sd In sdirs If sd = ".svn" Then Continue ' ignore subversion dirs For Each item In (RecDir(root &/ rootext, sd, pattern, filter)) wkrtn.Add(sd &/ item) Next Next Return wkrtn.Sort() Catch Error Subst("&1\nERR: &2 (&3)\n&4\n&1\n", String$(40, "-"), Error.Text, Error.Code, Error.Backtrace.Join("\n")) Error sd, root, rootext, pattern, filter End hth -- B Bruen <bbr...@paddys-hill.net> ------------------------------------------------------------------------------ Slashdot TV. Video for Nerds. Stuff that matters. http://tv.slashdot.org/ _______________________________________________ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user