Typo in the Finally section... "Exists(sFolderSpec)" should read "Exist(sFolderSpec)".
On 06/30/2011 11:58 PM, Stephen Bungay wrote: > 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 > ------------------------------------------------------------------------------ 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