>#include "FoxPro.h" >#define TRUE .t. >#define FALSE .f. >*------------------------------------------------------------------------------- >local QueueObj, SubfolderName > > >if( SubFolders(@m.QueueObj, "D:\tmp") ) > > do while m.QueueObj.DeQueue(@m.SubfolderName) > ?SubfolderName > enddo >endif >*------------------------------------------------------------------------------- >function SubFolders(QueueObj, FolderName) > > local Success > Success = TRUE > > local StackObj, ColObj, SubfolderName > StackObj = createObject('Stack') > QueueObj = createobject('Queue') > ColObj = createObject('Queue') > > local fsObj > fsObj = createobject('Scripting.FileSystemObject') > > do case > case !m.Success > > otherwise > try > objSubFolders = fsObj.GetFolder(m.FolderName).SubFolders > > catch > assert FALSE > Success = FALSE > > endtry > > endcase > > > do case > case !m.Success > > otherwise > for each Subfolder in m.objSubFolders > =m.ColObj.EnQueue(m.Subfolder.Path) > endfor > > endcase > > do while m.Success ; > and m.StackObj.AppendFrom(m.ColObj, TRUE) ; > and m.ColObj.Clear() ; > and m.StackObj.Pop(@m.SubfolderName) > > =m.QueueObj.EnQueue(m.SubfolderName) > > objSubFolders = fsObj.GetFolder(m.SubfolderName).SubFolders > > for each Subfolder in m.objSubFolders > =m.ColObj.EnQueue(m.Subfolder.Path) > endfor > > > enddo > > return m.Success > >endfunc >*------------------------------------------------------------------------------- >*------------------------------------------------------------------------------- >*=============================================================================== >*=============================================================================== >*=============================================================================== >define class Stack as CollectionBase > >*------------------------------------------------------------------------------- >function Push(v) > =m.this.Add(m.v) >endfunc >*------------------------------------------------------------------------------- >function Pop(v) > > if( empty(m.this.Count) ) > return FALSE > endif > v = m.this.Item(m.this.Count) > =m.this.Remove(m.this.Count) > >endfunc >*------------------------------------------------------------------------------- >function Peek(v) > > if( empty(m.this.Count) ) > return FALSE > endif > v = m.this.Item(m.this.Count) > >endfunc >*------------------------------------------------------------------------------- >*------------------------------------------------------------------------------- >enddefine >*=============================================================================== >*=============================================================================== >*=============================================================================== > > >*=============================================================================== >*=============================================================================== >*=============================================================================== >define class Queue as CollectionBase > >*------------------------------------------------------------------------------- >function EnQueue(v) > =m.this.Add(m.v) >endfunc >*------------------------------------------------------------------------------- >function DeQueue(v) > > if( empty(m.this.Count) ) > return FALSE > endif > v = m.this.Item(1) > =m.this.Remove(1) > >endfunc >*------------------------------------------------------------------------------- >function Peek(v) > > if( empty(m.this.Count) ) > return FALSE > endif > v = m.this.Item(1) > >endfunc >*------------------------------------------------------------------------------- >enddefine >*=============================================================================== >*=============================================================================== >*=============================================================================== > >*=============================================================================== >*=============================================================================== >*=============================================================================== >define class CollectionBase as Collection > >*------------------------------------------------------------------------------- >function Clear() > > =m.this.Remove(-1) > >endfunc >*------------------------------------------------------------------------------- >function Empty() > > return empty(m.this.Count) > >endfunc >*------------------------------------------------------------------------------- >function AppendFrom(ColObj, Reversed) > > local i > > do case > case !m.Reversed > for i = 1 to m.ColObj.Count > =m.this.Add(m.ColObj.Item[m.i]) > endfor > > otherwise > for i = m.ColObj.Count to 1 step -1 > =m.this.Add(m.ColObj.Item[m.i]) > endfor > > > endcase > > >endfunc >*------------------------------------------------------------------------------- >enddefine > >*=============================================================================== >*=============================================================================== >*=============================================================================== >