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

Fabien Bodard gambas.fr at ...626...
Tue Aug 26 10:35:54 CEST 2014


But gambas can't copy from a device to a different one
Le 26 août 2014 09:11, "Julio Sanchez" <jusabejusabe at ...626...> a écrit :

> 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
> >
>
> ------------------------------------------------------------------------------
> 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