On Mon, 25 Aug 2014 22:28:29 +0200
Julio Sanchez <[email protected]> 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 <[email protected]>
------------------------------------------------------------------------------
Slashdot TV.
Video for Nerds. Stuff that matters.
http://tv.slashdot.org/
_______________________________________________
Gambas-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gambas-user