[Gambas-user] Add new command to: Copy directories recursively

Julio Sanchez jusabejusabe at ...626...
Tue Aug 26 09:10:35 CEST 2014


Caveat:

Yes, that's the idea


Regards



2014-08-26 8:21 GMT+02:00 Caveat <Gambas at ...1950...>:

> Hello List
>
> Although there is always "cp -r", it makes for a very unportable program
> if you depend on calling external programs.  Better to build it in to
> the language if it's generally and genuinely useful, or to make a
> callable function in some public repository of Gambas code, so people
> don't need to reinvent the wheel every time they need a recursive copy.
>
> Kind regards,
> Caveat
>
> On 25/08/14 23:04, Tobias Boege wrote:
> > On Mon, 25 Aug 2014, Julio Sanchez wrote:
> >> Hi, could you add a new order within gambas3 to copy directories
> >> recursively.
> >>
> >> Something like this:
> >>
> >> PUBLIC <http://gambaswiki.org/wiki/lang/public> SUB
> >> <http://gambaswiki.org/wiki/lang/sub> copia_dir(path_origen AS
> >> <http://gambaswiki.org/wiki/lang/as> String
> >> <http://gambaswiki.org/wiki/lang/type/string>, path_destino AS
> >> <http://gambaswiki.org/wiki/lang/as> String
> >> <http://gambaswiki.org/wiki/lang/type/string>, OPTIONAL
> >> <http://gambaswiki.org/wiki/lang/optional> tipo as
> >> <http://gambaswiki.org/wiki/lang/as> String
> >> <http://gambaswiki.org/wiki/lang/type/string>)
> >>
> >>   DIM <http://gambaswiki.org/wiki/lang/dim> arDir AS
> >> <http://gambaswiki.org/wiki/lang/as> string
> >> <http://gambaswiki.org/wiki/lang/type/string>[]
> >>   DIM <http://gambaswiki.org/wiki/lang/dim> arFile AS
> >> <http://gambaswiki.org/wiki/lang/as> string
> >> <http://gambaswiki.org/wiki/lang/type/string>[]
> >>   DIM <http://gambaswiki.org/wiki/lang/dim> nombredir, nombrefile AS
> >> <http://gambaswiki.org/wiki/lang/as> String
> >> <http://gambaswiki.org/wiki/lang/type/string>
> >>
> >>   IF <http://gambaswiki.org/wiki/lang/if>  NOT
> >> <http://gambaswiki.org/wiki/lang/not> tipo then
> >> <http://gambaswiki.org/wiki/lang/then> tipo="*"
> >>   IF <http://gambaswiki.org/wiki/lang/if> NOT
> >> <http://gambaswiki.org/wiki/lang/not> Exist
> >> <http://gambaswiki.org/wiki/lang/exist>(path_destino) THEN
> >> <http://gambaswiki.org/wiki/lang/then>
> >>      MKDIR <http://gambaswiki.org/wiki/lang/mkdir> path_destino
> >>   ENDIF <http://gambaswiki.org/wiki/lang/endif>
> >>   arfile = Dir <http://gambaswiki.org/wiki/lang/dir>(path_origen,
> tipo, gb.
> >> file <http://gambaswiki.org/wiki/lang/type/file>)  'extraemos los
> ficheros
> >>   FOR <http://gambaswiki.org/wiki/lang/for> EACH
> >> <http://gambaswiki.org/wiki/lang/each> nombrefile IN
> >> <http://gambaswiki.org/wiki/lang/in> arfile  'los copiamos
> >>         COPY <http://gambaswiki.org/wiki/lang/copy> path_origen &/
> >>   nombrefile TO <http://gambaswiki.org/wiki/lang/to> path_destino &/
> >>   nombrefile
> >>   NEXT <http://gambaswiki.org/wiki/lang/next>
> >>   ardir = Dir <http://gambaswiki.org/wiki/lang/dir>(path_origen, "*",
> gb.
> >> Directory)
> >>   FOR <http://gambaswiki.org/wiki/lang/for> EACH
> >> <http://gambaswiki.org/wiki/lang/each> nombredir IN
> >> <http://gambaswiki.org/wiki/lang/in> arDir 'extraemos los
> subdirectorios
> >>          copia_dir(path_origen &/ nombredir, path_destino &/ nombredir)
> 'usamos
> >> la recursividad
> >>      NEXT <http://gambaswiki.org/wiki/lang/next>
> >> END <http://gambaswiki.org/wiki/lang/end>
> >>
> > For the other people who can't read the above HTML-like mail, try to pipe
> > it through "sed ':a;$!N;s/\n\?<[^>]*>//;ta;P;D'". There are only a few
> > places to fix up manually then:
> >
> >
> --8<------------------------------------------------------------------------
> > PUBLIC  SUB copia_dir(path_origen AS String, path_destino AS String,
> OPTIONAL tipo as String)
> >
> >   DIM  arDir AS string[]
> >   DIM  arFile AS string[]
> >   DIM  nombredir, nombrefile AS String
> >
> >   IF   NOT tipo then tipo="*"
> >   IF  NOT Exist(path_destino) THEN
> >      MKDIR  path_destino
> >   ENDIF
> >   arfile = Dir (path_origen, tipo, gb.file )  'extraemos los ficheros
> >   FOR  EACH nombrefile IN arfile  'los copiamos
> >         COPY  path_origen &/ nombrefile TO  path_destino &/ nombrefile
> >   NEXT
> >   ardir = Dir (path_origen, "*", gb.Directory)
> >   FOR  EACH nombredir IN arDir 'extraemos los subdirectorios
> >          copia_dir(path_origen &/ nombredir, path_destino &/ nombredir)
> 'usamos la recursividad
> >      NEXT
> > END
> >
> --8<------------------------------------------------------------------------
> >
> > I'm not a fan of adding a new instruction for something that can be done
> in
> > just a few lines once and for all. Here is my version[0], even a little
> > shorter (plus it can copy single files, too):
> >
> >
> --8<------------------------------------------------------------------------
> > Public Sub CopyDir(sSrc As String, sDst As String)
> >    Dim sRel As String
> >
> >    If IsDir(sSrc) Then
> >      Mkdir sDst
> >      For Each sRel In Dir(sSrc)
> >        CopyDir(sSrc &/ sRel, sDst &/ sRel)
> >      Next
> >    Else
> >      Copy sSrc To sDst
> >    Endif
> > End
> >
> --8<------------------------------------------------------------------------
> >
> > And then there is also "cp -r" at your disposal.
> >
> > Regards,
> > Tobi
> >
>
>
>
> ------------------------------------------------------------------------------
> Slashdot TV.
> Video for Nerds.  Stuff that matters.
> http://tv.slashdot.org/
> _______________________________________________
> Gambas-user mailing list
> Gambas-user at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/gambas-user
>



More information about the User mailing list