Rolf Ramacher hat geschrieben:ich möchte ein komplettes Verzeichnis mit Unterverzeichnissen kopieren. für jedes soll in einem sep. Tag - er bringt mir den Fehler, daß er das Programm nicht finden kann. beim runshell
sicherlich kann man das im CMD Fenster machen ...
eleganter wäre jedoch die Windows internen Funtionen zu benutzten ... mit Animation etc .
ShFile ( Phil Ide) oder TShFileOperation ( ot4xt ) bieten doch eine Class dafür womit du einen "Ordner" ( = kpl. Verzeichniss )
kopieren/moven/löschen kannst ( ZIP und "brennen" müsste auch möglich sein ... )
hier mal ein Code Snip
Code: Alles auswählen
INLINE METHOD SHThread(cAktion,lConfirm)
LOCAL oOp := TShFileOperation():New() // need ot4xb
LOCAL cSourceDir := ::oLw1:cStartdir
LOCAL cTargetDir := ::oLw2:cEnddir
LOCAL aData := oObj:getdata()
LOCAL nLen := LEN(aData)
IF lConfirm
// FOF_ALLOWUNDO + FOF_RENAMEONCOLLISION
oOp:fAllowUndo := .T.
oOp:fRenameOnCollision := .T.
ELSE
// FOF_ALLOWUNDO + FOF_SILENT + FOF_NOCONFIRMATION + FOF_RENAMEONCOLLISION
oOp:fAllowUndo := .T.
oOp:fSilent := .T.
oOp:fNoConfirmation := .T.
oOp:fRenameOnCollision := .T.
ENDIF
oOp:fWantMappingHandle := .T.
oOp:cFrom := {}
oOp:cTo := {}
//
// können mehrere Ordner*** und/oder Datein sein
// *** komplettes Verzeichniss
FOR i = 1 TO nLen
// Source
AADD( oOp:cFrom , cSourceDir + oObj:getitem( aData[i] ))
// Target
IF cAktion = "DELETE"
AADD( oOp:cTo , "" + CHR(0) )
ELSE
AADD( oOp:cTo , cTargetDir + oObj:getitem( aData[i] ) )
ENDIF
NEXT
DO CASE
CASE cAktion = "COPY"
oOp:cTitle := "Copy Files"
IF nLen > 1
oOp:fMultiDestFiles := .T.
ENDIF
oOp:Copy()
CASE cAktion = "MOVE"
oOp:cTitle := "Move Files"
IF nLen > 1
oOp:fMultiDestFiles := .T.
ENDIF
oOp:Move()
CASE cAktion = "DELETE"
oOp:cTitle := "Delete Files"
// to RecyleBin
oOp:fAllowUndo := .T.
oOp:Delete()
ENDCASE