Форум » [x]Harbour » Перенос папок ? » Ответить

Перенос папок ?

Andrey: Всем привет. Подскажите как можно определенную ПАПКУ перенести на другой диск ? Т.е. имеем ПАПКУ начального уровня, а сколько там еще папок и файлов не известно ! И как эту папку со всем содержимым перенести на другой диск ? Файлы легко переносятся, а вот с папками затык получается.... Может у кого есть готовое решение ?

Ответов - 71, стр: 1 2 3 4 All

AlexMyr: Andrey пишет: А проект сразу собрался ? Или правил мой test_dir55.hbp ? запускал сначала твой exe, потом собирал ничего не меняя в hbp, все нормально. А вот с папкой для пробы не работатет!

Andrey: AlexMyr пишет: запускал сначала твой exe, потом собирал ничего не меняя в hbp, все нормально. Значит я прогу правильно собрал, а то уж тупить начал... Ура, получилось собирать на Harbour'e !!! AlexMyr пишет: А вот с папкой для пробы не работатет! Да видать не все работает ... Значит не я туплю ! Интересно, а что там в папочке такого, что Харбор ломается ?

AlexMyr: // Определяю список подкаталогов и файлов корневого каталога aDirFiles := MyDirectoryRecurse( cSource, cMaskaFileCopy, { } ) возвращает пустой масив, нужно ковырять MyDirectoryRecurse, что-то не так!


AlexMyr: похоже ф-я не правильно обрабатывает файлы без расширений, вот, если все файлы с расширениями, то все нормально!

Andrey: Резуме: Пример ПРАВИЛЬНО работает на Harbour 3.x и xHarbour v.9437 Bcc 551, при условии что файлы в папке удаления ТОЛЬКО с расширениями ! В остальных компиляторах не работает пример. Ура победили совместными усилиями !!! Всем БОЛЬШОЕ СПАСИБО за помощь ! AlexMyr пишет: нужно ковырять MyDirectoryRecurse, Брал из МиниГуи - пример SAMPLES\BASIC\DirectoryRecurse Проверил пример - ничего не показывает ! Тогда наверно с этой ошибкой к Филатову ! Или самим исправить можно ?

santy: Andrey пишет: А что за файл - xhb_copy_file.xpj ? Каким редактором пользуешься ? Я использую xEdit от Xailer http://www.xailer.com/.

AlexMyr: Написал с нуля перенос папок, пробуй. Будут вопросы - задавай [pre2] #include "directry.ch" STATIC cPathG := "" FUNC main( cSource ) LOCAL ad1 := {} IF cSource == Nil Alert( "Put the source path" ) ELSE IF hb_DirExists( cSource ) scan_dir( cSource, "*.*", @ad1, .F. ) IF MyMove( "c:\BackUp1", ad1 ) == 0 scan_dir( cSource, "*.*", ad1, .T. ) ENDIF ELSE Alert( cSource + " don't exist" ) ENDIF ENDIF RETURN nil FUNC scan_dir( cPath, cFMask, arr, lDele ) LOCAL x := 0, nResDel LOCAL aDir LOCAL cSavePath := cPathG cPathG += cPath + "\" aDir := Directory( AllTrim( cPathG ) + AllTrim( cFMask ), "D" ) AAdd( arr, { cPathG, aDir } ) FOR x := 1 TO Len( aDir ) IF aDir[x,F_ATTR] == "D" .AND. ! AllTrim( aDir[x,F_NAME] ) $ ". .." scan_dir( aDir[x,F_NAME], "*.*", @arr, lDele ) ELSEIF aDir[x,F_ATTR] != "D" .AND. lDele OutStd( hb_eol() ) OutStd( "DELETE FILE " + cPathG + aDir[x,F_NAME] ) FErase( cPathG + aDir[x,F_NAME] ) nResDel := FError() OutStd( " ..." + iif( nResDel == 0," OK",Str(nResDel ) ) ) ENDIF NEXT IF lDele OutStd( hb_eol() ) OutStd( "DELETE DIR " + cPathG ) hb_DirDelete( cPathG ) nResDel := FError() OutStd( " ..." + iif( nResDel == 0," OK",Str(nResDel ) ) ) ENDIF cPathG := cSavePath RETURN nil PROC MyMove( cTarget, arr ) LOCAL x, y, nRes IF ! hb_DirExists( cTarget ) hb_DirCreate( cTarget ) ENDIF for EACH x in arr hb_DirCreate( cTarget + "\" + x[1] ) IF ValType( x[2] ) == "A" .AND. ! Empty( x[2] ) for EACH y in x[2] IF ! y[1] $ ". .." OutStd( hb_eol() ) OutStd( "COPY FILE " + x[1] + y[1] + " TO " + ctarget + "\" + x[1] + y[1] ) __CopyFile( ( x[1] + y[1] ), ( ctarget + "\" + x[1] + y[1] ) ) nres := FError() OutStd( " ..." + iif( nRes == 0," OK",Str(nRes ) ) ) ENDIF next ENDIF next RETURN nRes [/pre2]

Andrey: AlexMyr пишет: Написал с нуля перенос папок, пробуй. Ну молодец ! Буду пробовать...

AlexMyr: Немного подправил и добавил. Теперь на входе два параметра 1-й исходная папка, 2-й опция -move, если указана - делаем перенос, если нет - просто копируем. Папку можно задавать и с указанием полного пути к ней! Копирование с выводом лога в файл aa.log prog1 PRIKOL >aa.log то же, но с указанием полного пути prog1 c:\path1\PRIKOL >aa.log Перенос с выводом лога в файл aa.log prog1 PRIKOL -move >aa.log то же, но с указанием полного пути prog1 c:\path1\PRIKOL -move >aa.log [pre2]#include "directry.ch" #include "hbextcdp.ch" STATIC cPathG := "" FUNC main( cSource, lMove ) LOCAL ad1 := {} LOCAL cHostCP := "UA1251" LOCAL cTermCP := "UA1251" LOCAL lBoxChar := .T. hb_cdpSelect( cHostCP ) hb_SetTermCP( cTermCP, cHostCP, lBoxChar ) IF cSource == Nil Alert( "Put the source path" ) ELSE IF hb_DirExists( cSource ) scan_dir( cSource, "*.*", @ad1, .F. ) IF MyMove( "c:\BackUp1", ad1 ) == 0 IF lMove != NIL .AND. Lower( AllTrim( lMove ) ) == "-move" scan_dir( cSource, "*.*", ad1, .T. ) ENDIF ENDIF ELSE Alert( cSource + " don't exist" ) ENDIF ENDIF RETURN nil FUNC scan_dir( cPath, cFMask, arr, lDele ) LOCAL x := 0, nResDel LOCAL aDir LOCAL cSavePath := cPathG cPathG += cPath + "\" aDir := Directory( AllTrim( cPathG ) + AllTrim( cFMask ), "D" ) AAdd( arr, { cPathG, aDir } ) FOR EACH x in aDir IF x[F_ATTR] == "D" .AND. ! AllTrim( x[F_NAME] ) $ ". .." scan_dir( x[F_NAME], "*.*", @arr, lDele ) ELSEIF x[F_ATTR] != "D" .AND. lDele OutStd( hb_eol() ) OutStd( "DELETE FILE " + cPathG + x[F_NAME] ) FErase( cPathG + x[F_NAME] ) nResDel := FError() OutStd( " ..." + iif( nResDel == 0," OK",Str(nResDel ) ) ) ENDIF NEXT IF lDele OutStd( hb_eol() ) OutStd( "DELETE DIR " + cPathG ) hb_DirDelete( cPathG ) nResDel := FError() OutStd( " ..." + iif( nResDel == 0," OK",Str(nResDel ) ) ) ENDIF cPathG := cSavePath RETURN nil PROC MyMove( cTarget, arr ) LOCAL x, y, nRes, cPathwoDisk := "", cDirItem, cPathLong := "" IF ! hb_DirExists( cTarget ) hb_DirCreate( cTarget ) ENDIF for EACH x in arr IF ":" $ x[1] cPathwoDisk := SubStr( x[1], hb_At( ":\",x[1] ) + 2 ) ELSE cPathwoDisk := x[1] ENDIF cPathLong := cTarget FOR EACH cDirItem IN hb_ATokens( cPathwoDisk, hb_ps() ) IF !Empty( cDirItem ) cPathLong += hb_ps() + cDirItem if ! hb_DirExists(cPathLong) hb_DirCreate( cPathLong ) endif ENDIF next IF ValType( x[2] ) == "A" .AND. ! Empty( x[2] ) for EACH y in x[2] IF ! y[1] $ ". .." OutStd( hb_eol() ) OutStd( "COPY FILE " + x[1] + y[1] + " TO " + ctarget + "\" + cPathwoDisk + y[1] ) __CopyFile( ( x[1] + y[1] ), ( ctarget + "\" + cPathwoDisk + y[1] ) ) nres := FError() OutStd( " ..." + iif( nRes == 0," OK",Str(nRes ) ) ) ENDIF next ENDIF next RETURN nRes[/pre2]

Andrey: AlexMyr пишет: Немного подправил и добавил. Спасибо большое за пример ! Попробую его на хХарбор переделать... Я пока на нем сижу. Дай пожалуйста свой е-майл, хочу прогу выслать... Или мне на почту напиши 30195 СОБАКА mail.ru

AlexMyr: e-mail в профиле указан. А что за прога?



полная версия страницы