|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - [решено] архивация файлов, выбраных в ListBox |
|
|
Delphi - [решено] архивация файлов, выбраных в ListBox
|
Новый участник Сообщения: 29 |
Профиль | Отправить PM | Цитировать Доброго времени суток уважаемые форумчане. Помогите решить проблему:
Есть процедура для архивации файлов средствами ShellApi: ... procedure PackFile(ArcName, FileName: string); var s: string; begin s := 'a -dh -ep ' + ArcName + ' ' + FileName; ShellExecute(0, nil, 'winrar', PChar(s), nil, SW_SHOWNA); end; ... Есть обработчик событий: ... procedure TfMore.Button3Click(Sender: TObject); var a:Byte; begin for a:= 0 to ListBox1.Items.Count - 1 do begin PackFile('d:\Arhive\123456.rar', ListBox1.Items.Strings[a]); end; end; ... Можно ли как то решить этот вопрос по работе приведенной выше процедуры или может есть совет по иному способу архивации? Заранее благодарен. p.s. Вроде как и не логично "запихивать" в архив по одному файлу но другого ниче в голову не пришло. |
|
Отправлено: 11:44, 12-10-2011 |
Разный Сообщения: 1294
|
Профиль | Отправить PM | Цитировать надо сперва объединить выбранные в ListBox файлы в строку через пробел
а затем эту строку подставить в PackFile() P.S. список передается через пробел |
Последний раз редактировалось ferget, 12-10-2011 в 14:28. Отправлено: 14:15, 12-10-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
В Поисках Истины Сообщения: 802
|
Профиль | Отправить PM | Цитировать Цитата camope3:
Цитата Справка WinRar:
symbol = ' ';// символ для отделения файлов ( пробел ) for a:= 0 to ListBox1.Items.Count - 1 do begin files = files + ListBox1.Items.Strings[a] + symbol; // хранит строку списка файлов end; PackFile('d:\Arhive\123456.rar', files); // вызываем один раз архивацию Цитата Справка WinRar:
|
|||
------- Последний раз редактировалось LilLoco, 12-10-2011 в 16:20. Причина: Уточнение символа Отправлено: 14:22, 12-10-2011 | #3 |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать Благодарю всех откликнувшихся. LilLoco Немножко подправил Ваш код:
... procedure TfMore.Button3Click(Sender: TObject); var a:Byte; symbol,files:string; begin symbol:=' ';//здесь символ разделителя пробел for a:= 0 to ListBox1.Items.Count - 1 do begin files := files + ListBox1.Items.Strings[a] + symbol; PackFile('d:\Arhive\123456.rar', files); end; end; ... Еще раз всем спасибо! |
Отправлено: 17:44, 12-10-2011 | #4 |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать Доброго времени! Возвращаюсь обратно к созданой теме.
Работает все нормально НО, если архивирую больше трех файлов выскакивает вся та же ошибка, отчет из лога WinRar: 17.10.2011 15:16:16 Невозможно открыть d:\Arhive\123456.rar 17.10.2011 15:16:16 Процесс не может получить доступ к файлу, так как этот файл занят другим процессом. проблему "решил" отключив отчет об ошибках Но все же не могу понять что не так. Именно до трех файлов пакует без ошибки, более трех с ошибкой но все равно пакует. Перепробовал разные манипуляции с ключами WinRar не помогло. |
|
Отправлено: 16:23, 17-10-2011 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать camope3, Вы всё же стали паковать файлы по-отдельности, а не списком?
|
Отправлено: 17:35, 17-10-2011 | #6 |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать Цитата Iska:
перед files либо в процедуре перед FileName??? но тогда WinRar снова выдает ошибку: 17.10.2011 22:27:11 Невозможно открыть d:\Arhive\123.doc d:\Arhive\122.doc 17.10.2011 22:27:11 Синтаксическая ошибка в имени файла, имени папки или метке тома. p.s. Начал извращаться дальше, выгрузил список в файл spis.txt написал батник WinRaR упорно выдает ошибку текст файла spis.txt: Проверил - разделители пробелы. Выкидываю из списка 2 файла, оставляю один - архивирует. Я уже и незнаю где, что и как искать, просто замкнутый круг какой то |
|
Последний раз редактировалось camope3, 18-10-2011 в 00:44. Отправлено: 00:22, 18-10-2011 | #7 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать camope3, попробуйте привести весь получившийся итоговый код, относящийся к формированию перечня файлов и упаковке файлов.
Список Вы формировали именно так: |
Отправлено: 02:53, 18-10-2011 | #8 |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать Iska Спасибо!
.... ListBox1.Items.SaveToFile('spis.lst'); PackFile('d:\Arhive\123456.rar', '@spis.lst'); .... |
Последний раз редактировалось camope3, 18-10-2011 в 17:29. Отправлено: 15:19, 18-10-2011 | #9 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать camope3: во-первых, Вы напутали с количеством скобок и кавычками:
во-вторых, попробуйте так (и убедитесь, что «\» правильно в итоге будут расставлены): Вообще-то правильно будет получить незанятое имя во временной папке пользователя, создать файл-список там, подставлять его в командную строку архиватора с полным путём. |
Отправлено: 18:06, 18-10-2011 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - [Проблема] Архивация файлов | Brb | Microsoft Windows 7 | 4 | 19-08-2011 10:14 | |
VBS/WSH/JS - [решено] Архивация файлов с последующим удалением | Romano | Скриптовые языки администрирования Windows | 5 | 23-03-2011 18:03 | |
Доступ - [решено] Архивация пользовательских файлов отключена системным администратором | AlexxVP | Microsoft Windows 7 | 2 | 03-03-2010 18:25 | |
Выделение элемента в ListBox | ramo | Программирование и базы данных | 3 | 07-02-2007 20:56 | |
Listbox control in VB | Skiff | Программирование и базы данных | 1 | 25-02-2003 07:18 |
|