But gambas can't copy from a device to a different one Le 26 août 2014 09:11, "Julio Sanchez" <jusabejus...@gmail.com> a écrit :
> Caveat: > > Yes, that's the idea > > > Regards > > > > 2014-08-26 8:21 GMT+02:00 Caveat <gam...@caveat.demon.co.uk>: > > > 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@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@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@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user