Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.03.2012, 19:41   #1
Gravicapa
Новичок
Джуниор
 
Регистрация: 15.03.2012
Сообщений: 1
По умолчанию Консольное архивирование через WinRar

Всем привет! Ребят, очень прошу помочь.

Задача следующая:
Требуется выполнить сжатие файлов, находящихся в папке C:\Bases\. Полученный архив поместить для сохранности на два разных диска – в каталог c:\arhiv\ и в каталог d:\arhiv2. Каталоги создать при необходимости.

В С++ я полный ноль, начал делать часть программы, которая архивирует файлы в папке C:\Bases. На этой части и застрял.


Код программы:
Код:
#include <windows.h
#include <iostream.h>
using namespace std;

int main(int argc, char *argv[])
{ 
STARTUPINFO si1={sizeof(si1)}; 
PROCESS_INFORMATION pi1; 
 
CreateProcess(NULL,TEXT("C:\Program Files\WinRAR\Rar.exe a D:\archive.rar C:\Bases\*.*"), NULL, NULL, FALSE, 0, NULL, NULL, &si1, &pi1);
WaitForSingleObject(pi1.hProcess,INFINITE);
CloseHandle(pi1.hThread);
CloseHandle(pi1.hProcess);
 

    system("PAUSE");
    return EXIT_SUCCESS;
}
Когда ввожу эту строку в Cmd: C:\Program Files\WinRAR\Rar.exe a D:\archive.rar C:\Bases\*.* - все работает. Создается архив с файлами из нужной папке.


Но в C++ Builder при запуске кода ничего не происходит. Проэкт создаю через Console Wizard.

Не могу понять как передать эту команду создаваемому процессу. Скорее всего в синтаксисе дело.

Вообщем, можт кто сталкивался, знает. Помогите разобраться пожалуйста.

Последний раз редактировалось ACE Valery; 15.03.2012 в 21:57.
Gravicapa вне форума Ответить с цитированием
Старый 15.03.2012, 22:32   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Но в C++ Builder
А почему бы в Бульбульдере не посмотреть почему код не отрабатывает?:
Код:
SetLastError(0);
if(CreateProcess(NULL,TEXT("C:\Program Files\WinRAR\Rar.exe a D:\archive.rar C:\Bases\*.*"), NULL, NULL, FALSE, 0, NULL, NULL, &si1, &pi1)){
WaitForSingleObject(pi1.hProcess,INFINITE);
CloseHandle(pi1.hThread);
CloseHandle(pi1.hProcess);
} else {RaiseLastWin32Error();}
И почитать какую ошибку дает, если конечно дает.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.03.2012, 10:11   #3
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

Код:
CreateProcess(NULL, "\"C:\\Program Files\\WinRAR\\Rar.exe\" a D:\\archive.rar C:\\Bases\\*.*",NULL, NULL, FALSE, 0, NULL, NULL, &si1, &pi1);
Читаем первоисходник:
Цитата:
Security Remarks
The first parameter, lpApplicationName, can be NULL, in which case the executable name must be in the white space–delimited string pointed to by lpCommandLine. If the executable or path name has a space in it, there is a risk that a different executable could be run because of the way the function parses spaces. The following example is dangerous because the function will attempt to run "Program.exe", if it exists, instead of "MyApp.exe".
LPTSTR szCmdline = _tcsdup(TEXT("C:\\Program Files\\MyApp -L -S"));
CreateProcess(NULL, szCmdline, /* ... */);
If a malicious user were to create an application called "Program.exe" on a system, any program that incorrectly calls CreateProcess using the Program Files directory will run this application instead of the intended application.
To avoid this problem, do not pass NULL for lpApplicationName. If you do pass NULL for lpApplicationName, use quotation marks around the executable path in lpCommandLine, as shown in the example below.
LPTSTR szCmdline[] = _tcsdup(TEXT("\"C:\\Program Files\\MyApp\" -L -S"));
CreateProcess(NULL, szCmdline, /*...*/);
Знающий не говорит, говорящий не знает (С) Лао Цзы

Последний раз редактировалось ACE Valery; 16.03.2012 в 14:54.
Krok27 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Консольное приложение для обмена сообщениями через интеренет stdio Общие вопросы C/C++ 20 05.03.2012 02:21
архивирование файлов через shell eda Microsoft Office Excel 8 14.07.2009 09:46
архивирование das-xp Общие вопросы Delphi 5 26.06.2007 20:13
архивирование dron-s Общие вопросы Delphi 3 03.05.2007 11:56
WinRAR запускается через раз VitAngel Общие вопросы Delphi 0 16.02.2007 14:50