Работа с файлами и папками
|
|
dudnik_m | Дата: Понедельник, 11 Декабря 2006, 18:50 | Сообщение # 1 |
Новый участник
Группа: Пользователи
Сообщений: 18
Репутация: 0
Награды: 0
Статус: Offline
| Подскажите, пожалуйста, имеется ли возможность удалять папки или файлы програмным путем или по нажатию кнопки?
МДудник
|
|
| |
YURIY | Дата: Понедельник, 11 Декабря 2006, 20:05 | Сообщение # 2 |
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
| Quote (dudnik_m) | програмным путем или по нажатию кнопки? | А не одно и тоже? Нет, таких команд в MMB нет, но можно здесь можно использовать консольные команды. Для удаления файла: Code | Path$='ПУТЬ_К_ФАЙЛУ\ФАЙЛ.РАСШИРЕНИЕ' param$='WAIT,HIDE /c del "'+Path$+'" /Q' Run("cmd","param$") | Советую делать так, если имя файла может меняться и в переменной Path$ нужно указать путь к файлу в одинарных ковычках. Если путь к файлу заранее известен, то так проще: Code | Run("cmd","WAIT,HIDE /c del "ПУТЬ_К_ФАЙЛУ\ФАЙЛ.РАСШИРЕНИЕ" /Q") | Удаление папки делается приблизительно таким же методом, только консольная команда для удаления папки - это 'rd'. Отсюда имеем: Code | Run("cmd","WAIT,HIDE /c rd "ПОЛНЫЙ_ПУТЬ_К_ПАПКЕ" /Q /S") | Хотите больше возможностей? Выберите в меню пуск пункт "Выполнить...". Введите "cmd" и в появившейся консоли наберите help. Теперь и вы знаете консольные команды, которые можно использовать в проектах MMB Но имейте ввиду, что должны стоять определённые параметры в командах для правильного их исполнения. Имеются ввиду параметры, что стоят со знаком "/". Чтобы узнать, какие ключи (параметры) можно использовать при работе с консольными командами, надо в той же консоли ввести команду и «/?» и перед вами появится список допустимых ключей. Например, для удаления папки и файла мы используем ключ «/Q» - он позволяет отключить запрос на удаление, то есть Windows не будет спрашивать, действительно ли вы хотите удалить файл или папку. А для удаления папки я применил ещё и ключ «/S», который позволяет не просто удалить папку, но и то, что в ней находится – вложенные папки и файлы. Удачи!
Вечная память Андрею Сергееву!
|
|
| |
dudnik_m | Дата: Понедельник, 11 Декабря 2006, 21:07 | Сообщение # 3 |
Новый участник
Группа: Пользователи
Сообщений: 18
Репутация: 0
Награды: 0
Статус: Offline
| Через консоль оно , конечно, хорошо! Вот только у меня возникла проблема при удалении папки, имя которой написано кирилицей. Возможно я некорректно работаю с *.cmb - файлами? Подскажите, пожалуйста
МДудник
|
|
| |
YURIY | Дата: Понедельник, 11 Декабря 2006, 21:36 | Сообщение # 4 |
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
| Только что попробовал запустить команду Code | Run("cmd","WAIT,HIDE /c rd "C:\Папка" /Q /S") | и у меня всё прекрасно удалилось! И даже так делал: Code | Path$='C:\Папка' param$='WAIT,HIDE /c rd "'+Path$+'" /Q /S' Run("cmd","param$") | Что вы делали, интересно?!
Вечная память Андрею Сергееву!
|
|
| |
dudnik_m | Дата: Понедельник, 11 Декабря 2006, 23:38 | Сообщение # 5 |
Новый участник
Группа: Пользователи
Сообщений: 18
Репутация: 0
Награды: 0
Статус: Offline
| Приношу свои извинения за недостаточную конкретность. Все верно в Windows XP все работает без проблем. Иная ситуация в Windows Me. У меня почему то не виходит! Или совсем уже зацыклился, или нужно сделать передых
МДудник
|
|
| |
as-master | Дата: Вторник, 12 Декабря 2006, 01:54 | Сообщение # 6 |
Группа: Удаленные
| Quote (dudnik_m) | Все верно в Windows XP все работает без проблем. Иная ситуация в Windows Me. | Возможно, в МЕ команда командной строки работает как-то иначе. На всякий случай посмотри справочный файл, как тебе советовал Юрий. =================================================================== Как раз сейчас закончил проект, где я тоже столкнулся с некоторыми проблемами удаления файлов. Если нужно удалить файлы с атрибутом "Только для чтения", то нужно еще добавить параметр /F. То есть вся строка для параметра команды Run() будет выглядеть так: param$='WAIT,HIDE /c del "' + FullPath$ + '"/F /Q' где FullPath$ - переменная, содержащая полный путь к файлу. Лучше параметр /F всегда включать, так как атрибут "Только чтение" могут иметь, например, файлы, скопированные на винт с компакт-диска. И еще. Файлы, удаляемые таким способом, в корзину не попадают!!! Так что будьте внимательны :)
|
|
| |
dudnik_m | Дата: Вторник, 12 Декабря 2006, 14:40 | Сообщение # 7 |
Новый участник
Группа: Пользователи
Сообщений: 18
Репутация: 0
Награды: 0
Статус: Offline
| Спасибо большое всем за рекомендации. Видимо у меня что то с системой, т.к. в командной строке справу получить не могу. Отвечает, что много параметров. Буду разбираться. Успехов!
МДудник
|
|
| |
as-master | Дата: Вторник, 12 Декабря 2006, 14:47 | Сообщение # 8 |
Группа: Удаленные
| dudnik_m, однозначно - ставь быстрее Windows XP SP2!!! У меня отлично работает даже на втором компе, где Celeron 1,2. Кучи проблем избежишь. Кстати, где-то я читал, что вроде Майкрософт признала ошибкой выпуск этой ОС и теперь старательно открещивается от нее. Практически нет сейчас для нее никакой поддержки - ни драйверов, нн обновлений, ни патчей. Добавлено (12 Декабря 2006, 14:47) --------------------------------------------- Именно Service Pack 2!!!
|
|
| |
dudnik_m | Дата: Вторник, 12 Декабря 2006, 14:54 | Сообщение # 9 |
Новый участник
Группа: Пользователи
Сообщений: 18
Репутация: 0
Награды: 0
Статус: Offline
| Я понимаю о проблемах с WinМе. У меня стоит не только WinMe, но и еще четыре ОС. Но я ведь не для себя делаю. А там стоит WinMe . Поэтому приходится учитывать особенности использования. Все равно спасибо!
МДудник
|
|
| |
as-master | Дата: Вторник, 12 Декабря 2006, 18:13 | Сообщение # 10 |
Группа: Удаленные
| Можно, конечно, при запуске программы определять версию винды у пользователя, и, если это не ХР, помахать ему ручкой Либо делать разные скрипты, которые будут запускаться в зависимости от определенной при запуске версии виндовс. Только сначала все равно нужно узнать синтаксис командной строки именно для МЕ.Добавлено (12 Декабря 2006, 18:13) --------------------------------------------- Если он действительно имеет отличия.
|
|
| |
codemaster | Дата: Среда, 13 Декабря 2006, 15:07 | Сообщение # 11 |
Новый участник
Группа: Пользователи
Сообщений: 10
Репутация: 0
Награды: 0
Статус: Offline
| Скрипт для разных операционок должен быть типа такого: param$='WAIT,HIDE /c del "' + FullPath$ + '"/F /Q' If (UsingWinNT()) Then Run("cmd","param$") Else Run("<Windows>\..\command.com","param$") End
|
|
| |
as-master | Дата: Среда, 13 Декабря 2006, 15:45 | Сообщение # 12 |
Группа: Удаленные
| Quote (codemaster) | Скрипт для разных операционок должен быть типа такого: | Тогда достаточно писать просто: Code | Run("<Windows>\..\command.com","param$") | И это будет работать для всех операционок. Но речь не о том, как запустить команду command.com, а о том, что прописано в переменной param$. Вот в чем вопрос.
Сообщение отредактировал as-master - Среда, 13 Декабря 2006, 15:46 |
|
| |
codemaster | Дата: Среда, 13 Декабря 2006, 16:06 | Сообщение # 13 |
Новый участник
Группа: Пользователи
Сообщений: 10
Репутация: 0
Награды: 0
Статус: Offline
| command.com - аналог cmd в Win98/Me, поэтому Quote | Run("<Windows>\..\command.com","param$") | будет работать только там. А то что прописано в param$ - одинаково для любой Винды.
|
|
| |
as-master | Дата: Среда, 13 Декабря 2006, 18:32 | Сообщение # 14 |
Группа: Удаленные
| Однако command.com запускается и у меня в XP Потому я и говорю, что это работает для любой винды.
|
|
| |
codemaster | Дата: Среда, 13 Декабря 2006, 18:57 | Сообщение # 15 |
Новый участник
Группа: Пользователи
Сообщений: 10
Репутация: 0
Награды: 0
Статус: Offline
| Эх, могу только предположить, что вы ставили XP поверх Me или 9x. Потому что в "голом" XP command.com быть не может, говорю же, этот файл в NT отсутствует. Иначе бы я не предлагал такой вариант. Спросите у других - наверняка у них нет command.com в системе.
|
|
| |
dudnik_m | Дата: Среда, 13 Декабря 2006, 19:20 | Сообщение # 16 |
Новый участник
Группа: Пользователи
Сообщений: 18
Репутация: 0
Награды: 0
Статус: Offline
| В windows Me проблему удалось решить, но частично. Пришлось полный путь прописать согласно требованиям DOS. Допускается кирилица в названии папки и файлов. Для этого пишу: Code | Run("<Windows>\command.com","WAIT,HIDE /c ECHO Y | DEL c:\Progra~1\Чертеж~1\*.*") | Но папки то не удаляются!
МДудник
|
|
| |
codemaster | Дата: Среда, 13 Декабря 2006, 20:09 | Сообщение # 17 |
Новый участник
Группа: Пользователи
Сообщений: 10
Репутация: 0
Награды: 0
Статус: Offline
| dudnik_m, Вот такой скрипт удалит и папки, и файлы: Code | Folder$='D:\Папка для очистки' SearchForFiles("Folder$","*.*") If (CBK_NumInList<>0) Then For i=1 To CBK_NumInList LoadText("file$","<List>i") parameter$='WAIT,HIDE /c del "'+file$+'" /Q /F' If (UsingWinNT()) Then Run("cmd.exe","parameter$") Else Run("command.com","parameter$") End Item$=ExtractDrive(file$)+ExtractDir(file$) Length=LEN(Item$) Item$=StrDel(Item$,Length,1) If (PrevItem$<>Item$ & Item$<><Temp>) Then parameter$='WAIT,HIDE /c rd /q /s "'+Item$+'"' PrevItem$=Item$ If (UsingWinNT()) Then Run("cmd","parameter$") Else Run("command.com","parameter$") End End Next i End |
|
|
| |
dudnik_m | Дата: Среда, 13 Декабря 2006, 23:03 | Сообщение # 18 |
Новый участник
Группа: Пользователи
Сообщений: 18
Репутация: 0
Награды: 0
Статус: Offline
| codemaster [color=purple]К сожалению этот вариант не подходит для Windows Me. Во-первых: вот, что дает справка DEL [диск:][путь]имя_файла [/P] ERASE [диск:][путь]имя_файла [/P] [диск:][путь]имя_файла Имя удаляемого файла (файлов). Для удаления сразу нескольких файлов используются подстановочные знаки. /P Выдача запросов при удалении каждого файла. Во - вторых не воспринимает длянные имена. Ну должен же быть какой - то выход!
МДудник
|
|
| |
codemaster | Дата: Среда, 13 Декабря 2006, 23:06 | Сообщение # 19 |
Новый участник
Группа: Пользователи
Сообщений: 10
Репутация: 0
Награды: 0
Статус: Offline
| Сейчас нет Me под рукой, поэтому не могу сказать, писал подразумевая, что в WinMe те же параметры. Под XP все будет работать "на отлично". Приведите подробную выдержку из справки по командам, решим что с ними делать.
Сообщение отредактировал codemaster - Среда, 13 Декабря 2006, 23:08 |
|
| |
as-master | Дата: Среда, 13 Декабря 2006, 23:16 | Сообщение # 20 |
Группа: Удаленные
| Quote (codemaster) | Эх, могу только предположить, что вы ставили XP поверх Me или 9x. Потому что в "голом" XP command.com быть не может | Ты будешь смеяться, но у меня ЕСТЬ этот файл в папке system32. И уж никаких установок "поверх" я не делал. Даже СервПак второй не ставил поверх, а а снёс старый XP и поставил в чистом виде сразу XP SP2. Так что не знаю, откуда уж у меня этот файлик... Может, с каким-нибудь приложением установился? Ау, народ, у кого еще есть файл command.com на Windows XP? Добавлено (13 Декабря 2006, 23:16) --------------------------------------------- dudnik_m, а ты попробуй сначала не в ММВ поработать, а в самой винде, запустив командную строку. И оттуда поэкспериментировать с разными вариантами написания команды и ключей к ней.
|
|
| |
dudnik_m | Дата: Среда, 13 Декабря 2006, 23:25 | Сообщение # 21 |
Новый участник
Группа: Пользователи
Сообщений: 18
Репутация: 0
Награды: 0
Статус: Offline
| as-master Я и эксперементировал в ОС, а уж потом адаптировал. Во только с удалением папки не выходит. Относительно command.com, то у меня тоже єтот файл имеется в тойже папке в WinXP.
МДудник
|
|
| |
codemaster | Дата: Среда, 13 Декабря 2006, 23:36 | Сообщение # 22 |
Новый участник
Группа: Пользователи
Сообщений: 10
Репутация: 0
Награды: 0
Статус: Offline
| Я писал в команде тот command.com, который лежит в корне системного диска в Me/9x. То что лежит в system32 к этому отношения не имеет. Зачем же вы тогда используете cmd в XP? Пользуйтесь тогда command.com Все-таки приведите справку по консоли в Me, у кого она установлена...
|
|
| |
as-master | Дата: Четверг, 14 Декабря 2006, 12:09 | Сообщение # 23 |
Группа: Удаленные
| Quote (codemaster) | Зачем же вы тогда используете cmd в XP? | А есть какая-то разница? По-моему. главное чтоб работало Quote (codemaster) | То что лежит в system32 к этому отношения не имеет. | Просто тогда в твоем варианте сценария можно написать <System> вместо <Windows>. Добавлено (14 Декабря 2006, 12:09) ---------------------------------------------
Quote (codemaster) | Вот такой скрипт удалит и папки, и файлы: | Проверено админом Папка удалена со всем содержимым. УТВЕРЖДАЮ :)
|
|
| |
dudnik_m | Дата: Четверг, 14 Декабря 2006, 13:36 | Сообщение # 24 |
Новый участник
Группа: Пользователи
Сообщений: 18
Репутация: 0
Награды: 0
Статус: Offline
| Как я уже говорил, что все выше приведенные предложения без проблем работают в WinXP, но в WinMe ни один не удалил нужную папку. Во всяком случае у меня. Немного покопавшись, вот что нашел для WinMe: Code | ******************************************************************* DELTREE [/Y] [диск:]путь [[диск:]путь[...]] /Y Блокировка выдачи запросов на подтверждение удаления подпапок. [диск:]путь Имя удаляемой папки.(с учетом требований для DOS) ******************************************************************* | Замечание. Программу DELTREE следует использовать осторожно, так как удалены будут все файлы и папки, входящие в указанную папку.
МДудник
|
|
| |
codemaster | Дата: Четверг, 14 Декабря 2006, 15:19 | Сообщение # 25 |
Новый участник
Группа: Пользователи
Сообщений: 10
Репутация: 0
Награды: 0
Статус: Offline
| Quote (dudnik_m) | Замечание. Программу DELTREE следует использовать осторожно, так как удалены будут все файлы и папки, входящие в указанную папку. | Ну так и используйте! Quote (as-master) | Просто тогда в твоем варианте сценария можно написать <System> вместо <Windows>. | Тогда и попадешь в system32, а в моем варианте попадаешь в корень системного диска.
|
|
| |
as-master | Дата: Четверг, 14 Декабря 2006, 15:52 | Сообщение # 26 |
Группа: Удаленные
| Ну что - кажется, проблема наконец-то решена? ;) Добавлено (14 Декабря 2006, 15:52) --------------------------------------------- Quote (codemaster) | Тогда и попадешь в system32, а в моем варианте попадаешь в корень системного диска. | В том-то и дело! Я и имел в виду, что в корне системного диска у меня этой программы нет, так как лежит она в System32 и для ХР ее надо запускать именно оттуда. И если я у себя напишу: Code | Run("<Windows>\command.com","") | То эта программа не запустится. Для XP надо: Code | Run("<System>\command.com","") |
Сообщение отредактировал as-master - Четверг, 14 Декабря 2006, 15:52 |
|
| |
codemaster | Дата: Четверг, 14 Декабря 2006, 18:33 | Сообщение # 27 |
Новый участник
Группа: Пользователи
Сообщений: 10
Репутация: 0
Награды: 0
Статус: Offline
| Quote (as-master) | В том-то и дело! Я и имел в виду, что в корне системного диска у меня этой программы нет, так как лежит она в System32 и для ХР ее надо запускать именно оттуда. | Это конечно правильно, но в Me command.com лежит в корне, оттуда мы и плясали. Если бы речь шла о XP, то я бы даже и не упоминал command.com Ну да ладно, главное, что человек вроде как разобрался.
|
|
| |
dudnik_m | Дата: Четверг, 14 Декабря 2006, 19:35 | Сообщение # 28 |
Новый участник
Группа: Пользователи
Сообщений: 18
Репутация: 0
Награды: 0
Статус: Offline
| Всем спасибо за участие в решении моей проблемы! Правду говорят, что правильно заданый вопрос содержит половину ответа! Удачи всем
МДудник
|
|
| |