1

Konu: Deltree - Delete all file

Selamlar,

Deltree komutunu foxpro da nasıl taklit ederiz?

Bir klasördeki tüm dosyaları sil ?

2

Re: Deltree - Delete all file

Buldum. Aşağıda en basit şekliyle görebilirsiniz.

ofs = CREATEOBJECT("Scripting.FileSystemObject")
odir = ofs.GetFolder("c:\mset\data")
? odir.Delete

3

Re: Deltree - Delete all file

Bu da, gelişmiş hali smile

SET SAFETY OFF

IF DELETEFOLDER("c:\$incoming\testdir")
    MESSAGEBOX("Success",48,"Done")
ELSE
    MESSAGEBOX("Failed",48,"Not Done")
ENDIF



FUNCTION DELETEFOLDER
    ** simple function that gets all the file and folder names (using the subfoldersearch function)
    ** and then deletes them
    PARAMETERS m.FOLDERNAME
    PRIVATE m.FOLDERNAME,m.FLG
    M.FLG = .T.
    ** gathers the names and folders into two tables (TMPFILES and TMPDIRS) in the c:\temp folder
    SUBFOLDERSEARCH(m.FOLDERNAME,"*.*","c:\temp\",.T.,"TMPFILES","TMPDIRS",.F.)
    SELECT 0
    USE C:\TEMP\TMPFILES
    SET ORDER TO
    SELECT TMPFILES
    GO TOP
    ** scan the files in any order you like
    DO WHILE .NOT. EOF()
        ** delete each file
        DELETE FILE (ALLTRIM(FULLNAME))
        SKIP
    ENDDO
    USE
    SELECT 0
    USE C:\TEMP\TMPDIRS
    SET ORDER TO
    GO BOTTOM
    ** scan the folders in reverse order (deepest first)
    DO WHILE .NOT. BOF()
        IF DIRECTORY(ALLTRIM(FPATH))
            ** if they are still there - remove the folder
            RMDIR (ALLTRIM(FPATH))
        ENDIF
        SKIP-1
    ENDDO
    USE
    IF DIRECTORY(m.FOLDERNAME)
        ** if the folder is still there... you failed
        M.FLG = .F.
    ENDIF
    RETURN(m.FLG)



FUNCTION SUBFOLDERSEARCH
    PARAMETERS m.TOPLEVEL,m.MASK,m.TEMPDIR,m.PROGRESS,m.TEMPFILE,m.TMPDIRS,m.LEAVEOPEN
    PRIVATE m.TOPLEVEL,m.MASK,m.TEMPDIR,m.TEMPFILE,m.TMPDIRS,m.LEAVEOPEN,m.PROGRESS,I,X,m.LASTPATH,NUMFILES,NUMDIR
    PRIVATE m.OLDAREA
    DIMENSION ALIST[1,5],FLIST[1,5]
    IF PCOUNT() < 7
        M.LEAVEOPEN = .F.
    ENDIF
    IF PCOUNT() < 6
        M.TMPDIRS = "TMPDIRS"
    ENDIF
    IF PCOUNT() < 5
        M.TEMPFILE = "TMPFILES"
    ENDIF
    IF PCOUNT() < 4
        M.PROGRESS = .F.
    ENDIF
    IF PCOUNT() < 3
        M.TEMPDIR = "C:\TEMP\"
    ENDIF
    IF PCOUNT() < 2
        M.MASK = "*.*"
    ENDIF
    IF PCOUNT() < 1
        M.TOPLEVEL = ".\"
    ENDIF
    M.OLDAREA = SELECT()
    ** CREATE A COUPLE OF TEMPORARY TABLES - ONE FOR THE FINAL FILENAME LIST (COMPLETE WITH PATHS
    SELECT 0
    CREATE TABLE (m.TEMPDIR+m.TEMPFILE) FREE (FULLNAME C(240) NOT NULL, FILESIZE N(12,0) NOT NULL, FILEDATE D NOT NULL, FILETIME C(8) NOT NULL, FILEATTR C(20) NOT NULL)
    USE (m.TEMPDIR+m.TEMPFILE) ALIAS TMPFILES EXCLUSIVE
    INDEX ON FULLNAME TAG TMPFILES
    ** AND ONE FOR THE FOLDERS TO SEARCH
    SELECT 0
    CREATE TABLE (m.TEMPDIR+m.TMPDIRS) FREE (FPATH C(240) NOT NULL,PROCESSED C(1) NOT NULL)
    USE (m.TEMPDIR+m.TMPDIRS) ALIAS TMPDIRS EXCLUSIVE
    ** USE AN INDEX TO KEEP CHECKING FOR UNPROCESSED SUBFOLDERS
    INDEX ON PROCESSED TAG TMPDIRS

    ** START BY PUTTING THE 'WHERE TO START' IN LIST OF UNPROCESSED FOLDERS
    SELECT TMPDIRS
    SET ORDER TO TMPDIRS
    APPEND BLANK
    REPLACE FPATH WITH m.TOPLEVEL
    REPLACE PROCESSED WITH "N"
    GO TOP

    SELECT TMPDIRS
    SET ORDER TO TMPDIRS
    SEEK "N"
    ** SCAN THE LIST OF SUBFOLDERS - LOOKING FOR UNPROCESSED ONES
    DO WHILE .NOT. EOF()
        ** MAKE A NOTE OF THE FOLDERS PATH
        M.LASTPATH = ALLTRIM(FPATH)+IIF(RIGHT(ALLTRIM(FPATH),1)<> "\","\","")
        WAIT "Checking..." + m.LASTPATH WINDOW NOWAIT TIMEOUT 1
        ** CHECK FOR FILES MATCHING MASK
        NUMFILES = ADIR(FLIST,m.LASTPATH+m.MASK)
        FOR I = 1 TO NUMFILES
            ** IGNORE THE . AND .. ONES
            IF FLIST[i,1] <> "." .AND. FLIST[i,1] <> ".."
                ** STICK THE FILES IN THE FILE LIST
                SELECT TMPFILES
                APPEND BLANK
                *REPLACE FPATH      WITH M.LASTPATH
                REPLACE FULLNAME WITH m.LASTPATH+FLIST[i,1]
                REPLACE FILESIZE WITH FLIST[i,2]
                REPLACE FILEDATE WITH FLIST[i,3]
                REPLACE FILETIME WITH FLIST[i,4]
                REPLACE FILEATTR WITH FLIST[i,5]
            ENDIF
        NEXT
        ** MARK THAT FOLDER AS PROCESSED
        SELECT TMPDIRS
        REPLACE PROCESSED WITH "Y"
        ** NOW CHECK THE FOLDER FOR SUBFOLDERS - HAVE TO DO THIS BECAUSE THE MASK
        ** FOR FILES OF INTEREST WILL BE DIFFERENT TO THE ONE FOR FOLDERS
        NUMDIR = ADIR(ALIST,m.LASTPATH+"*.*","D")
        ** FOR EACH FOLDER FOUND
        FOR I = 1 TO NUMDIR
            ** IGNORE THE ONES THAT ARE NOT FOLDERS AND THAT ARE CALLED . OR ..
            IF "D"$ALIST[i,5] .AND. ALIST[i,1] <> "." .AND. ALIST[i,1] <> ".."
                SELECT TMPDIRS
                APPEND BLANK
                REPLACE FPATH WITH m.LASTPATH+ALIST[i,1]
                REPLACE PROCESSED WITH "N"
            ENDIF
        NEXT
        ** LOOK FOR THE NEXT UNPROCESSED FOLDER
        WAIT CLEAR
        SELECT TMPDIRS
        SET ORDER TO TMPDIRS
        SEEK "N"
    ENDDO
    RELEASE FLIST
    RELEASE ALIST
    SELECT TMPDIRS
    USE
    SELECT TMPFILES
    IF !m.LEAVEOPEN
        USE
        SELECT(m.OLDAREA)
    ENDIF
    RETURN(m.TEMPDIR+m.TEMPFILE+IIF(UPPER(RIGHT(m.TEMPFILE,4)) <> ".DBF",".DBF",""))

4

Re: Deltree - Delete all file

Ya da daha gelismis hali icin filer.dll ve SetFileAttributes/DeleteFile API:)
Eski forumda kurban gitti class.

5

Re: Deltree - Delete all file

Ben çok aradım onları ya sad
Bide sizin, fileoperations class'ı vardı ki ona yanarım...

6

Re: Deltree - Delete all file

Dosyalar bolumune gonderdim.

7

Re: Deltree - Delete all file

Hemen indirdim teşekkürler.