Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
anti-k
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
Завершенные тесты: 1
1

Ошибка параметров в функции WinExec

10.11.2015, 16:36. Просмотров 876. Ответов 16
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
    char *buffer = new char[MAX_PATH];
    GetCurrentDirectoryA(MAX_PATH, buffer); 
    //remove(buffer);
    //delete[]buffer;
    //buffer = new char[MAX_PATH];
    //GetCurrentDirectoryA(MAX_PATH, buffer);
    CharToOemA(buffer, buffer);
    std::cout << buffer << std::endl;
    int l = strlen(buffer);
 
    std::istringstream v(buffer);   
    WinExec( "attrib -r v *.* /S /D", SW_HIDE);
выдает ошибку параметров, подскажите в чем дело?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.11.2015, 16:36
Ответы с готовыми решениями:

Ошибка. Переопределение параметров в функции
Добрый вечер всем! Такая задача: Необходимо составить программу для систем...

Как узнать адрес функции Winexec
Пробовал через IDA, вроде нашел, но не сработал Через Ollydbg не могу найти

Ошибка в функции с переменным числом параметров
Доброго времени суток. Необходимо написать функцию с переменным числом...

Ошибка при написании функции с неизвестным числом параметров
Ругается на va_start не могу понять за что) #include&lt;iostream&gt;...

Перегруженные функции и функции с переменным числом параметров
Написать перегруженные функции и основную программу, которая их вызывает. а)...

16
pproger
165 / 68 / 17
Регистрация: 22.03.2011
Сообщений: 196
10.11.2015, 16:45 2
anti-k, тыж путь к файлу не передаешь
0
castaway
Эксперт С++
4930 / 3037 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
10.11.2015, 16:58 3
Цитата Сообщение от anti-k Посмотреть сообщение
выдает ошибку параметров
???
1
nmcf
6274 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
10.11.2015, 17:19 4
WinExec() - obsolete. Используй system() и убери v.
1
anti-k
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
Завершенные тесты: 1
10.11.2015, 17:25  [ТС] 5
castaway,
О!, мое почтение. наконец то!!
Задание следующее, определить текущую директорию, и изменить атрибуты каталога либо файла.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
WCHAR* ui=L"C:\\Users\\hp\\Documents\\Visual Studio 2015\\Projects\\ConsoleApplication4\\ConsoleApplication4\\Test.txt";
    int a = GetFileAttributes(ui);
    std::cout << a << std::endl;
    SetFileAttributes(ui, 1);
    std::ofstream fout;
    fout.open("C:\\Users\\hp\\Documents\\Visual Studio 2015\\Projects\\ConsoleApplication4\\ConsoleApplication4\\Test.txt");
    fout << "Lasha";
    fout.close();
    std::ifstream rout;
    char buff[BUFSIZ];
    rout.open(ui);  
    rout.getline(buff, BUFSIZ);
    std::cout << buff << std::endl;
 
    rout.close();
Когда я прописываю строку адреса вручную, все ок. Затем,
C++
1
2
3
4
5
6
7
8
   char* buffer = new char[MAX_PATH];
    GetCurrentDirectoryA(MAX_PATH, buffer);
    CharToOemA(buffer, buffer);
    std::cout << buffer << std::endl;//D:\PPP\!!!!! то есть потерялся слеш
 
 
 
    WinExec("attrib +h +r D:\\PPP\\*.*  /S /D", SW_HIDE);
Затем
C++
1
2
3
4
5
6
7
8
 char* buffer = new char[MAX_PATH];
    GetCurrentDirectoryA(MAX_PATH, buffer);
    CharToOemA(buffer, buffer);
    std::cout << buffer << std::endl;//D:\PPP\!!!!! то есть потерялся слеш
 
    std::istringstream v(buffer);
 
    WinExec("attrib +h +r v*.*  /S /D", SW_HIDE);
Компилится но в консольке дает -ошибка параметра, на русском!!

Добавлено через 5 минут
nmcf,
C++
1
2
3
4
5
6
7
    wchar_t *buffer = new wchar_t[MAX_PATH]();
    _wgetcwd(buffer, MAX_PATH);
    int szMessage = lstrlenW(buffer);
    char*ansi = new char[szMessage + 1]();
    ::WideCharToMultiByte(CP_ACP, 0, buffer, -1, ansi, MAX_PATH + 1, 0, 0);
    CharToOemA(ansi, ansi);
    std::cout << ansi << std::endl;
З дуру и вот так пробовал.

А как убрать v и потом прописать
C++
1
"attrib +h +r D:\\PPP\\*.*  /S /D"
мне нужен адрес полученный из GetCurrentDirectoryA
0
pproger
165 / 68 / 17
Регистрация: 22.03.2011
Сообщений: 196
10.11.2015, 17:30 6
anti-k,
Цитата Сообщение от anti-k Посмотреть сообщение
castaway,
О!, мое почтение. наконец то!!
o_O
тебе помогли его три знака вопроса? силееен.
0
castaway
Эксперт С++
4930 / 3037 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
10.11.2015, 17:30 7
Я не понимаю смысла твоих манипуляций...
Попробуй так:
C++
1
2
3
4
    char * cmd = new char [MAX_PATH];
    sprintf( cmd, "attrib +H +R %s*.* /S /D", path );
    WinExec( cmd, SW_HIDE );
    delete [] cmd;
В path должен быть путь со слешем в конце.
1
anti-k
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
Завершенные тесты: 1
10.11.2015, 17:32  [ТС] 8
pproger,
Цитата Сообщение от pproger Посмотреть сообщение
тыж путь к файлу не передаешь
однозначно не помогло, НО вам тоже мое почтение!
0
nmcf
6274 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
10.11.2015, 17:40 9
Лучший ответ Сообщение было отмечено anti-k как решение

Решение

Если ты в текущем каталоге это делаешь, то зачем нужно вставлять туда путь?
C++
1
system("attrib +h +r *.* /S /D");
1
anti-k
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
Завершенные тесты: 1
10.11.2015, 17:46  [ТС] 10
nmcf,
castaway,
Спасибо, теперь все мазя!
И все таки почему на выходе из ф-ции GetCurrentDirectoryA,
при выводе на экран полученного массива я получаю примерно такой результат
C++
1
C:\Users\hp\Documents\Visual Studio 2015\
иными словами где девается слэши(в моем понимании C:\\Users\\hp\\Documents\\Visual Studio 2015\\)
0
castaway
Эксперт С++
4930 / 3037 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
10.11.2015, 17:48 11
Цитата Сообщение от anti-k Посмотреть сообщение
иными словами где девается слэши(в моем понимании C:\\Users\\hp\\Documents\\Visual Studio 2015\\)
Они никуда не деваются. Двойной слеш в строке - одиночный в реальности.
1
anti-k
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
Завершенные тесты: 1
10.11.2015, 17:51  [ТС] 12
castaway,
Цитата Сообщение от castaway Посмотреть сообщение
Они никуда не деваются. Двойной слеш в строке - одиночный в реальности.
Чудеса!
То есть в случае
C++
1
char*pts=strchr(mass,'\\')
как раз будет искать один '\'?
0
castaway
Эксперт С++
4930 / 3037 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
10.11.2015, 17:55 13
Цитата Сообщение от anti-k Посмотреть сообщение
как раз будет искать один '\'?
Да.
const char * s = "\\\"; - строка из двух бэкслешей.
strlen( s ) == 2
1
anti-k
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
Завершенные тесты: 1
10.11.2015, 18:02  [ТС] 14
castaway, спасибо!
0
castaway
Эксперт С++
4930 / 3037 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
10.11.2015, 18:08 15
anti-k, в моём предыдущем сообщении потерялся один бэкслеш в строке (съел форум). Их там должно быть четыре, а не три.
0
nmcf
6274 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
10.11.2015, 18:15 16
castaway, надо запасной ставить.
0
castaway
Эксперт С++
4930 / 3037 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
10.11.2015, 18:29 17
nmcf, а я, кстати, ставил. Просто после того как отредактировал сообщение, добавив в него последнюю строку, форум съел еще один слеш, который я заметил уже после...
0
10.11.2015, 18:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.11.2015, 18:29

ShellExecute WinExec ....
Привет всем :)) у меня появилать очень интересная проблема с WinExec и...

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

Передача параметров функции
Добрый день! Помогите, пожалуйста с передачей параметров по функциям. Как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru