Removal not empty directory
Posted: Sat Jul 28, 2012 3:18 am
Whether there is a team of removal of the empty directory containing subdirectories and files?
Donnay Software Web Forums
http://bb.mobile.donnay-software.com/Donnay/
http://bb.mobile.donnay-software.com/Donnay/viewtopic.php?f=2&t=808
what is the Problem ?Eugene Lutsenko wrote:Whether there is a team of removal of the empty directory containing subdirectories and files?
Code: Select all
#include "Directry.ch"
#include "common.ch"
PROCEDURE Main(cdir)
ZapDir(cdir,.T.)
RETURN
PROCEDURE ZapDir(cDir,lRecursive)
LOCAL aFiles := Directory(cDir+"\"+"*.*","DHS")
LOCAL iMax := LEN(aFiles)
LOCAL i
DEFAULT lRecursive TO .F.
FOR i := 1 TO iMax
IF aFiles[ i, F_ATTR ] = "D"
IF aFiles[ i, F_NAME ] = "." .OR. ;
aFiles[ i, F_NAME ] = ".."
ELSE
ZapDir(cDir+"\"+aFiles[ i, F_NAME],lRecursive)
RemoveDir(cDir+"\"+aFiles[ i, F_NAME])
ENDIF
ELSE
FERASE(cDir+"\"+aFiles[ i, F_NAME])
ENDIF
NEXT
RETURN
I also used this function, but it turned out clumsily. Here is how at me removal not the empty folder "00000004" (in it still there is a "System" folder with a large number of different files) looked:rdonnay wrote:If you have Xbase tools, it contains a function named DirRemove().
Code: Select all
M_PathAppl = Path_Appl
* MsgBox(ALLTRIM(M_PathAppl)) // D:\ALASKA\AIDOS-X\AID_DATA\00000004\System
DIRCHANGE(M_PathAppl) // Сделать текущей папку System, в которой находится исходное приложение
// Определение полного имени текущей папки
M_DiskName := DISKNAME()
M_CurDir := CURDIR()
M_DiskDir := M_DiskName+":\"+M_CurDir
* MsgBox(ALLTRIM(M_DiskDir)) // D:\ALASKA\AIDOS-X\AID_DATA\00000004\System
IF M_PathAppl = M_DiskDir // Удалось сделать папку System текущей
FILEDELETE("*.*") // Удалить все файлы в папке System
// Удалить саму папку System
DIRCHANGE(ALLTRIM(STRTRAN(M_PathAppl,"\System"," ")))
DIRREMOVE("System")
DIRCHANGE(M_ApplsPath) // Удалить папку с приложением (числовое имя)
DIRREMOVE(ALLTRIM(STRTRAN(M_PathAppl,"\System"," ")))
// Удалить запись об удаляемом приложении в БД Appls.dbf
DIRCHANGE(Disk_dir)
DELETE;PACK
ELSE
MsgBox("Не удалось сделать папку удаляемого приложения текущей !")
ENDIF
Code: Select all
PROCEDURE Main(cDir)
ZapDir(cDir,.T.)
RemoveDir(cDir)
RETURN