Форум
Написать нам
  • Страница 1 из 1
  • 1
Модератор форума: as-master  
Форум MMB » Всё о программе Multimedia Builder » Общие вопросы по MMB » Работа с файлами и папками (Как удалить папку или файл)
Работа с файлами и папками
dudnik_mДата: Понедельник, 11 Декабря 2006, 18:50 | Сообщение # 1
Новый участник
Группа: Пользователи
Сообщений: 18
Репутация: 0
Награды: 0
Статус: Offline
Подскажите, пожалуйста, имеется ли возможность удалять папки или файлы програмным путем или по нажатию кнопки? wacko

МДудник
 
YURIYДата: Понедельник, 11 Декабря 2006, 20:05 | Сообщение # 2
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
Quote (dudnik_m)
програмным путем или по нажатию кнопки?

А не одно и тоже? smile

Нет, таких команд в 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 smile Но имейте ввиду, что должны стоять определённые параметры в командах для правильного их исполнения. Имеются ввиду параметры, что стоят со знаком "/".

Чтобы узнать, какие ключи (параметры) можно использовать при работе с консольными командами, надо в той же консоли ввести команду и «/?» и перед вами появится список допустимых ключей. Например, для удаления папки и файла мы используем ключ «/Q» - он позволяет отключить запрос на удаление, то есть Windows не будет спрашивать, действительно ли вы хотите удалить файл или папку. А для удаления папки я применил ещё и ключ «/S», который позволяет не просто удалить папку, но и то, что в ней находится – вложенные папки и файлы.

Удачи!



Вечная память Андрею Сергееву!
 
dudnik_mДата: Понедельник, 11 Декабря 2006, 21:07 | Сообщение # 3
Новый участник
Группа: Пользователи
Сообщений: 18
Репутация: 0
Награды: 0
Статус: Offline
Через консоль оно , конечно, хорошо! Вот только у меня возникла проблема при удалении папки, имя которой написано кирилицей. Возможно я некорректно работаю с *.cmb - файлами? Подскажите, пожалуйста cool

МДудник
 
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. У меня почему то не виходит! Или совсем уже зацыклился, или нужно сделать передых tongue

МДудник
 
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
Спасибо большое всем за рекомендации. Видимо у меня что то с системой, т.к. в командной строке справу получить не могу. Отвечает, что много параметров. Буду разбираться. Успехов! biggrin

МДудник
 
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 cry . Поэтому приходится учитывать особенности использования. Все равно спасибо! smile

МДудник
 
as-masterДата: Вторник, 12 Декабря 2006, 18:13 | Сообщение # 10
Группа: Удаленные





Можно, конечно, при запуске программы определять версию винды у пользователя,
и, если это не ХР, помахать ему ручкой smile Либо делать разные скрипты, которые будут
запускаться в зависимости от определенной при запуске версии виндовс.
Только сначала все равно нужно узнать синтаксис командной строки именно для МЕ.

Добавлено (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 smile
Потому я и говорю, что это работает для любой винды.
 
codemasterДата: Среда, 13 Декабря 2006, 18:57 | Сообщение # 15
Новый участник
Группа: Пользователи
Сообщений: 10
Репутация: 0
Награды: 0
Статус: Offline
Эх, могу только предположить, что вы ставили XP поверх Me или 9x. Потому что в "голом" XP command.com быть не может, говорю же, этот файл в NT отсутствует. Иначе бы я не предлагал такой вариант. Спросите у других - наверняка у них нет command.com в системе. smile
 
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 Выдача запросов при удалении каждого файла.

Во - вторых не воспринимает длянные имена.
Ну должен же быть какой - то выход! cry


МДудник
 
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 wink Все-таки приведите справку по консоли в Me, у кого она установлена...
 
as-masterДата: Четверг, 14 Декабря 2006, 12:09 | Сообщение # 23
Группа: Удаленные





Quote (codemaster)
Зачем же вы тогда используете cmd в XP?

А есть какая-то разница? По-моему. главное чтоб работало smile

Quote (codemaster)
То что лежит в system32 к этому отношения не имеет.

Просто тогда в твоем варианте сценария можно написать <System> вместо <Windows>.

Добавлено (14 Декабря 2006, 12:09)
---------------------------------------------

Quote (codemaster)
Вот такой скрипт удалит и папки, и файлы:

Проверено админом smile Папка удалена со всем содержимым.
УТВЕРЖДАЮ :)

 
dudnik_mДата: Четверг, 14 Декабря 2006, 13:36 | Сообщение # 24
Новый участник
Группа: Пользователи
Сообщений: 18
Репутация: 0
Награды: 0
Статус: Offline
Как я уже говорил, что все выше приведенные предложения без проблем работают в WinXP, но в WinMe ни один не удалил нужную папку. cry Во всяком случае у меня. Немного покопавшись, вот что нашел для WinMe:
Code
*******************************************************************
DELTREE [/Y] [диск:]путь [[диск:]путь[...]]

  /Y       Блокировка выдачи запросов на подтверждение
          удаления подпапок.
  [диск:]путь   Имя удаляемой папки.(с учетом требований для DOS)
*******************************************************************


Замечание. Программу DELTREE следует использовать осторожно, так как
удалены будут все файлы и папки, входящие в указанную папку. wink


МДудник
 
codemasterДата: Четверг, 14 Декабря 2006, 15:19 | Сообщение # 25
Новый участник
Группа: Пользователи
Сообщений: 10
Репутация: 0
Награды: 0
Статус: Offline
Quote (dudnik_m)
Замечание. Программу DELTREE следует использовать осторожно, так как
удалены будут все файлы и папки, входящие в указанную папку.

Ну так и используйте! smile
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 Ну да ладно, главное, что человек вроде как разобрался. smile
 
dudnik_mДата: Четверг, 14 Декабря 2006, 19:35 | Сообщение # 28
Новый участник
Группа: Пользователи
Сообщений: 18
Репутация: 0
Награды: 0
Статус: Offline
Всем спасибо за участие в решении моей проблемы!
Правду говорят, что правильно заданый вопрос содержит половину ответа!
Удачи всем biggrin


МДудник
 
Форум MMB » Всё о программе Multimedia Builder » Общие вопросы по MMB » Работа с файлами и папками (Как удалить папку или файл)
  • Страница 1 из 1
  • 1
Поиск: