Hi Fabien & Tobias; Thanks for taking the time to reply and putting those SUBs together. Another way to do this is to simply execute a "mkdir -p " using the command shell, but now that the problem exists I want to figure out why the recursive routine is not behaving as expected. Fabien, I thought the FINALLY did precede the CATCH within the function... did it not? I reprint the SUB here with two additional comments, a correction to a typo (thank you Tobias), and a conditional surrounding the Mkdir in the Finally section just in case it tries to make a directory that already exists and ends up going into an endless loop.
Private Sub CreateNewOutputFolder(psFolderSpecification As String) Dim sFolderSpec As String sFolderSpec = psFolderSpecification Mkdir sFolderSpec Finally If Not exists(sFolderSpec) Then Mkdir sFolderSpec End If Catch sFolderSpec = Mid$(psFolderSpecification, 1, RInStr(psFolderSpecification, "/") - 1) CreateNewOutputFolder(sFolderSpec) End On 06/30/2011 10:09 AM, Fabien Bodard wrote: > private sub CreateDirTree(sDir as string) > > dim s as string > dim stmpDir as string = "/" > > if sdir begins "/" then sdir = right(sdir,-1) > > For each s in split(sDir, "/") > stmpDir&= s > if exist(stmpdir) then continue > mkdir stmpdir > next > > catch > Print "The directory "& stmpdir& "can't be created" > > end > > > 2011/6/30 Fabien Bodard<gambas...@gmail.com>: >> The FINALLY part is not mandatory. If there is a catch part in the >> function, the FINALLY part must precede it. >> >> http://gambasdoc.org/help/lang/finally >> >> The second call will be in the catch part not in finally. >> >> 2011/6/30 Stephen Bungay<sbun...@csolve.net>: >>> Hi folks! >>> >>> Gambas 2.99 >>> Fedora 14 >>> >>> Using mkdir with "catch" and "finally" to create a recursive SUB to >>> build a directory structure. >>> The harness consists of FormMain with one big-friendly button on it, >>> pretty simple. Here is all of the code; >>> >>> ' Gambas class file >>> >>> Public Sub _new() >>> >>> End >>> >>> Public Sub Form_Open() >>> >>> End >>> >>> Private Sub CreateNewOutputFolder(psFolderSpecification As String) >>> Dim sFolderSpec As String >>> >>> sFolderSpec = psFolderSpecification >>> >>> Mkdir sFolderSpec >>> >>> Finally >>> Mkdir sFolderSpec >>> >>> Catch >>> sFolderSpec = Mid$(psFolderSpecification, 1, >>> RInStr(psFolderSpecification, ".") - 1) >>> CreateNewOutputFolder(sFolderSpec) >>> End >>> >>> Public Sub Button1_Click() >>> >>> CreateNewOutputFolder("/home/user/Rumple/Stilskin/Was/Here") >>> >>> End >>> >>> >>> What I THINK should happen is the initial mkdir should fail, the code >>> in "catch" should execute and copy the passed in parameter from position >>> 1 to the charcter just prior to the last "/" and then call itself >>> passing in the new result as the parameter. When/if that call fails (and >>> it should as this folder specification doesn't exist in my home dir) it >>> again recurses. This should go on until it reaches the left-most node in >>> the directory structure (AFTER the "/home/user"), and THAT one >>> ("/home/user/Rumple) should be the first to succeed in being created. >>> The call stack should then unwind, and as it does, the previous SUBS on >>> the stack should execute their "Finally" section. When the stack has >>> completely unwound the directory structure should exist.... only that is >>> not what is happening. >>> The first Catch doesn't execute (although the directory does not get >>> created.. meaning an error did indeed occur) and it skips directly to >>> the "finally". When the mkdir in the "finally" is executed (same >>> parameter string because we have not yet recursed) the error "File or >>> Directory does not exist" pops up on the screen. Well there's the error >>> that I expected from the initial mkdir, but the "catch" didn't execute, >>> anybody got ideas? >>> >>> ------------------------------------------------------------------------------ >>> All of the data generated in your IT infrastructure is seriously valuable. >>> Why? It contains a definitive record of application performance, security >>> threats, fraudulent activity, and more. Splunk takes this data and makes >>> sense of it. IT sense. And common sense. >>> http://p.sf.net/sfu/splunk-d2d-c2 >>> _______________________________________________ >>> Gambas-user mailing list >>> Gambas-user@lists.sourceforge.net >>> https://lists.sourceforge.net/lists/listinfo/gambas-user >>> >> >> >> -- >> Fabien Bodard >> > > ------------------------------------------------------------------------------ All of the data generated in your IT infrastructure is seriously valuable. Why? It contains a definitive record of application performance, security threats, fraudulent activity, and more. Splunk takes this data and makes sense of it. IT sense. And common sense. http://p.sf.net/sfu/splunk-d2d-c2 _______________________________________________ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user