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

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

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

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

AndreyZh: Andrey пишет: Вообще-то я задавал другой вопрос, если не знаете как исправить - то не пишите, не захламляйте текущую ветку ! Да'с с вежливостью у Вас проблемы на все вопросы, в том числе по "аналогам" ответил выше (со зрением то же?)... Для других интересующихся данными вопросами вспомнил, что есть элементарное решение всех данных задач - WinAPI. Привожу код на Fox (просто в данной системе пришлось их решать), но обсуждались где-то аналогичные приёмы на Harbour: *** Глобальная переменная объекта доступа к методам класса файловой системы WINDOWS API PUBL goFSO *** Открываю или создаю объект файловой системы WinAPI * 1. Сохраняю старый обработчик ошибок Fox lcError = ON("ERROR") * 2. Запрет реагировать системе на ошибку отсутствия объекта ON ERROR goFSO = .NULL. * 3. Попытка получить ссылку на открытый объект (ЭТО НЕ НУЖНО - ПРОСТО КАК ПРИМЕР) goFSO = GetObject(,"Scripting.FileSystemObject") * 4. Если нет открытого объекта, то создаю его IF IsNull(goFSO) goFSO = CreateObject("Scripting.FileSystemObject") ENDIF * 5. Возврат старого обработчика ошибок ON ERROR &lcError -------------------------------- ПОТОМ ИСПОЛЬЗУЮ ПО МЕРЕ НЕОБХОДИМОСТИ, НАПРИМЕР ДЛЯ РАБОТЫ С КАТАЛОГАМИ * Копирую каталог со всеми подкаталогами goFSO.CopyFolder(стрИсходныйКаталог,стрКудаКопировать) * Удаляю исходный каталог. goFSO.DeleteFolder(стрУдаляемыйКаталог,.T.)

Andrey: AndreyZh пишет: Да'с с вежливостью у Вас проблемы на все вопросы, в том числе по "аналогам" ответил выше (со зрением то же?)... Мне нужно решить мою проблему на хХарборе. Ваши ответы не помогают решить эту проблему. Я пишу здесь о файлах, вы же предлагаете ваш какой-то генератор печати !!! Порассуждать можно в СПЕЦИАЛЬНОЙ ветке Для флейма. Заводите там свою тематику, порассуждаем там. AndreyZh пишет: Привожу код на Fox (просто в данной системе пришлось их решать) Еще раз пишу вам - здесь обсуждаются вопросы и решения на HARBOUR'e !!! Задаю вопрос конкретно - 32 ошибка удаления директории ? А какой ваш ответ ? Для Fox - заводите отдельную ветку и пишите там !

Dima: Andrey Полегче можно ? Остынь


Andrey: Dima Да блин не получается... второй день долблюсь , а тут про другое...

SADSTAR4: А почему не использовать системную команду MOVE? Сама все обойдет и скопирует и удалит. Если на разных дисках. А если на одном - просто перенесет ссылку в другой каталог (без копирования и удаления!)

Andrey: SADSTAR4 пишет: А почему не использовать системную команду MOVE? Да не хочется использовать запуск бат-файла. И добиться работы этой проги хочется. На простом месте - грабли ! Пример который я сделал, можно будет тогда использовать везде: на Харборе и хХарборе. Там вроде все просто и уровень вложенности любой можно копировать и удалять. Только вот удаление каталога почему-то не делается. Ошибка 32. Хотя я делал отдельный пример, он эти каталоги удаляет без проблем ! Одна и таже функция DIRMOVE() , одна и таже кодировка OEM - а не работает ??? Вот и взываю к гуру, почему так получается ? Уж очень дело до логического конца хочется довести.

Dima: Andrey пишет: Только вот удаление каталога почему-то не делается. Ошибка 32 Имя каталога набрано кирилицей ? Каталог пуст ? Есть ли в нем скрытые (системные) файлы ? Эта папка по сети никем не открыта ?

Chikanuk: Error Meaning 0 Successful 2 File not found 3 Path not found 4 Too many files open 5 Access denied 6 Invalid handle 8 Insufficient memory 15 Invalid drive specified 19 Attempted to write to a write-protected disk 21 Drive not ready 23 Data CRC error 29 Write fault 30 Read fault 32 Sharing violation 33 Lock Violation (x)Harbour.chm Похоже, удаляемая папка расшарена по сети?

Andrey: Dima пишет: Имя каталога набрано кирилицей ? Каталог пуст ? Есть ли в нем скрытые (системные) файлы ? Эта папка по сети никем не открыта ? Имя каталога набрано и кирилицей и латиницей. Каталог пуст, файлы в нем удаляются перед удалением папки. В них нет системных файлов. Папка локальная, т.е. у себя на компе, без сети. Chikanuk пишет: 32 Sharing violation Да читал я это - знаю. Я же писал вверху - подготовил рабочий пример (кода оченьмало). Выложил. Еще раз привожу ссылку. ( Исходник и пример здесьhttp://files.mail.ru/WD4SWU ) Попробуйте и сами увидите эту "чертовщину" .... Запуск: test_dir4.exe D:\TEST-DELETE Прога перенесет содержимое папки D:\TEST-DELETE (любой вложенности) в C:\@MUSOR Файлы удалит, а папки не сможет удалить !? Выдаст ошибку 32. Вот я вас и прошу указать мне где я не прав в исходнике, или кто тогда неправ ? хХарбор ? Как тогда удалить папки под хХарбором ? В принципе можно и забить (не удалять папки) - но не хочется сдаватся...

Chikanuk: Отработала на ура. Папку создал, накидал файлов, запустил и получил: Source - D:\TEST-DELETE\*.* 1, File: test_dir4.bc 2, File: test_dir4.exe 3, File: test_dir4.prg -------- Copy dir + files --------------- 1, File: D:\TEST-DELETE\test_dir4.bc --> C:\@MUSOR\test_dir4.bc 2, File: D:\TEST-DELETE\test_dir4.exe --> C:\@MUSOR\test_dir4.exe 3, File: D:\TEST-DELETE\test_dir4.prg --> C:\@MUSOR\test_dir4.prg -------- Delete files ---------------- 1, Delete file: D:\TEST-DELETE\test_dir4.bc (0) 2, Delete file: D:\TEST-DELETE\test_dir4.exe (0) 3, Delete file: D:\TEST-DELETE\test_dir4.prg (0) ---------- Delete DIR ---------------- 1, Delete DIR: [D:\TEST-DELETE] (0) Права на удаление папки у пользователя, под которым запускаешь тест, есть? Винда какая? (Тестил на Vista Home Premium)

Chikanuk: Andrey пишет: Вот я вас и прошу указать мне где я не прав в исходнике, Пример рекурсивного обхода директорий выбран неудачный: не выдает он ПУСТЫХ директорий (и всех вложенных ниже уровнем). А удалять пытаешься ПУСТЫЕ директории. Их и нет, соответственно, в массиве. Так что в твоем примере STATIC FUNCTION MyDirectoryRecurse( cPath, cFileMask, aResult ) не рабочая!!! Посмотри пример SAMPLES\ADVANCED\DirTree и в нем Static Procedure ScanDir( cPath ). Особенно на чекбокс Check_3. А отрабатывает твой пример только на 1-м уровне вложенности, т. е. папка и в ней файлы (что я и указал в предыдущем посте).

Andrey: Chikanuk пишет: Права на удаление папки у пользователя, под которым запускаешь тест, есть? Винда какая? (Тестил на Vista Home Premium) У меня WinXp SP3. Права админские. У меня получается другой результат: Source - D:\TEST-DELETE\*.* 1, File: test_dir4.bc 2, File: test_dir4.exe 3, File: test_dir4.prg 4, File: проба.txt 5, File: проба.тхт 6, File: установка.doc -------- Copy dir + files --------------- 1, File: D:\TEST-DELETE\test_dir4.bc --> C:\@MUSOR\test_dir4.bc 2, File: D:\TEST-DELETE\test_dir4.exe --> C:\@MUSOR\test_dir4.exe 3, File: D:\TEST-DELETE\test_dir4.prg --> C:\@MUSOR\test_dir4.prg 4, File: D:\TEST-DELETE\проба.txt --> C:\@MUSOR\проба.txt 5, File: D:\TEST-DELETE\проба.тхт --> C:\@MUSOR\проба.тхт 6, File: D:\TEST-DELETE\установка.doc --> C:\@MUSOR\установка.doc -------- Delete files ---------------- 1, Delete file: D:\TEST-DELETE\test_dir4.bc (0) 2, Delete file: D:\TEST-DELETE\test_dir4.exe (0) 3, Delete file: D:\TEST-DELETE\test_dir4.prg (0) 4, Delete file: D:\TEST-DELETE\проба.txt (0) 5, Delete file: D:\TEST-DELETE\проба.тхт (0) 6, Delete file: D:\TEST-DELETE\установка.doc (0) ---------- Delete DIR ---------------- 1, Delete DIR: [D:\TEST-DELETE] (32) Даже одну папку не может удалить ! Опять 32 ошибка. Интересно, почему XP и Vista по разному работают. Пойду тестить на других машинах....

Andrey: Chikanuk пишет: Посмотри пример SAMPLES\ADVANCED\DirTree и в нем Static Procedure ScanDir( cPath ). Особенно на чекбокс Check_3. Спасибо БОЛЬШОЕ за разъяснение и подсказки !!! Хоть куда-то двигаться дальше можно !!!

al-sklif: Andrey, подскажите, а чем кончились изыскания? А то у меня вылезла похожая проблема: 32 ошибка и все! Папка явно пустая и не расшарена...

Andrey: al-sklif пишет: Andrey, подскажите, а чем кончились изыскания? Да ничем. Бросил эту НЕПОНЯТКУ и все.... Видать вылазит эта ошибка при определенных условиях ! Тест мой здесь: http://files.mail.ru/8VY0WD Может дело только в хХарборе ? Попробуй собрать на Харборе.

nick_mi: Андрей! в твоем примере на Harbour - те-же результаты. Но если заремить MyCopyDir и оставить только MyDeleteDir( cSource, "*.*" ) - удаления директория проходят, по крайней мере для первого уровня, глубже рекурсию я не делал. Очевидно где-то в MyCopyDir оставляешь какие-то хвосты, которые не позволяют удалить директорий.

Andrey: nick_mi пишет: MyCopyDir оставляешь какие-то хвосты, которые не позволяют удалить директорий. Вот и я об этом тоже писал ! Нет файлов - одни хвосты... Что-то в Харборе не закрывается (флаг какой-нибудь), т.е. Харбор понимает, что директория занята после копирования файлов ! Это тогда разработчикам на форум писать надо. Я не знаю как ! Короче НЕПОНЯТКИ по Харбору тоже.

nick_mi: Замени FileCopy на команду copy file f1 to F2 и в Harbour - Счастье !!! отработало

Andrey: nick_mi пишет: Замени FileCopy на команду copy file f1 to F2 И всех делов то.... Т.е. функция в Харборе - FileCopy() глючная ?

al-sklif: Разгреб я все-таки свой ЧАСТНЫЙ случай: В папке лежат файлы текстового формата, их надо обработать, перенести в разные места, в зависимости от содержимого и пустую папку удалить. Так вот проблема лезла после применения функции filesize() к файлу в этой папке. После этого прога считала, что папка расшарена и все, несмотря на то, что все файлы потом удалялись. Проблему решил путем последующего применения filesize() любому, от фонаря, можно и к явно не существующему файлу, типа filesize("C:\123.txt")... После этого все пошло как надо



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