>>**DO changetreeattr WITH 'c:\dir\*.*','N' && To reset >>**DO changetreeattr WITH 'c:\dir\*.*','R' && Readonly >> >>Procedure changetreeattr >> Lparameters lcFileSkeleton, lcAttributes, lcCursor >> Local lcSelect As String, ; >> lnProcessed As Number >> Local lcAttributes1 As String >> lcSelect = Select() >> lnProcessed = 0 >> lcAttributes1 = [] >> Select 0 >> If Pcount() < 3 Or Vartype(lcCursor) # [C] >> lcCursor = [curFiles] >> Endif >> Do RecurseDirectories With lcFileSkeleton, lcAttributes1, .F., lcCursor >> Scan >> setattr(Fullpath, lcAttributes) >> Endscan >> lnProcessed = Reccount() >> Use >> Select (lcSelect) >> Wait Clear >> Return lnProcessed >> >>**************************************** >>Procedure RecurseDirectories >> Lparameters lcFileSkeleton, lcAttributes, llKeepDirectory, lcCursor >> Local Array laDirectory[1, 1] >> Local lnFileCount As Integer >> Local lnCounter As Integer >> Local lcCurrentPath As Varchar(200) >> If Empty(llKeepDirectory) >> llKeepDirectory = .F. >> Endif >> If !llKeepDirectory >> Create Cursor (lcCursor); >> (Fullpath Varchar(200), filepath Varchar(200), filename Varchar(80), ext Varchar(4), filesize Integer, FullName Varchar(100), ModiDate Date, ModiTime Char(16), FileAttr Char(6)) >> Endif >> If Empty(lcFileSkeleton) >> lcFileSkeleton = [*.*] >> Endif >> If Empty(lcAttributes) >> lcAttributes = [DHS] >> Endif >> lnFileCount = Adir(laDirectory, lcFileSkeleton, lcAttributes) >> lcCurrentPath = Justpath(lcFileSkeleton) >> Wait [Processing: ] + Alltrim(lcCurrentPath) + [..hang on!] Window Nowait >> If lnFileCount > 0 >> For lnCounter = 1 To lnFileCount >> If !Empty(Strtran(laDirectory[lncounter, 1], [.], [])) >> If [D] $ laDirectory[lncounter, 5] && directory - need to recursively call! >> RecurseDirectories(Addbs(lcCurrentPath) + Addbs(Trim(laDirectory[lncounter, 1])) + Justfname(lcFileSkeleton), lcAttributes, .T., lcCursor) >> Else >> Insert Into (lcCursor) (Fullpath, filepath, FullName, filename, ext, filesize, ModiDate, ModiTime, FileAttr); >> Values (Addbs(lcCurrentPath) + laDirectory[lncounter, 1], lcCurrentPath, laDirectory[lncounter, 1], Juststem(laDirectory[lncounter, 1]), Justext(laDirectory[lncounter, 1]), laDirectory[lncounter, 2], laDirectory[lncounter, 3], laDirectory[lncounter, 4], laDirectory[lncounter, 5]) >> Endif >> Endif >> Endfor >> Endif >> Return >>**************************************** >>Function setattr >> Parameter tFileName, tAttribute >> tAttribute = Upper(tAttribute) >> Private nAttribute >> nAttribute = 0 >> If [S] $ tAttribute && System >> nAttribute = nAttribute + 4 >> Endif >> If [H] $ tAttribute && Hidden >> nAttribute = nAttribute + 2 >> Endif >> If [R] $ tAttribute && ReadOnly >> nAttribute = nAttribute + 1 >> Endif >> If [A] $ tAttribute && Archive >> nAttribute = nAttribute + 32 >> Endif >> If [N] $ tAttribute && Normal >> nAttribute = nAttribute + 128 >> Endif >> Declare Integer SetFileAttributes In kernel32 String, Integer >> Return SetFileAttributes(tFileName, nAttribute) = 1>>
>>>FUNCTION SetAttr >>>PARAMETER tFileName, tAttribute >>>tAttribute = UPPER(tAttribute) >>>Private nAttribute >>>nAttribute=0 >>>If 'S'$tAttribute && System >>> nAttribute = nAttribute + 4 >>>Endif >>>If 'H'$tAttribute && Hidden >>> nAttribute = nAttribute + 2 >>>Endif >>>If 'R'$tAttribute && ReadOnly >>> nAttribute = nAttribute + 1 >>>Endif >>>If 'A'$tAttribute && Archive >>> nAttribute = nAttribute + 32 >>>Endif >>>If 'N'$tAttribute && Normal >>> nAttribute = nAttribute + 128 >>>Endif >>>declare integer SetFileAttributes IN kernel32 STRING, INTEGER >>>Return SetFileAttributes(tFileName,nAttribute)=1>>>