Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
anti-k
227 / 75 / 23
Регистрация: 17.07.2015
Сообщений: 774
Завершенные тесты: 1
#1

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

10.11.2015, 16:36. Просмотров 314. Ответов 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 (C++):

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

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

Ошибка при написании функции с неизвестным числом параметров - C++
Ругается на va_start не могу понять за что) #include&lt;iostream&gt; #include&lt;cstring&gt; using namespace std; char*foo(int n, ...); ...

Передача параметров в функции - C++
Здравствуйте Помогите, пожалуйста, разобраться с передачей параметров. Задание : создать класс &quot;Треугольник&quot;, определить углы и тип...

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

Передача параметров функции - C++
доброго времени суток:) есть программа реализующая метод градиентного спуска. но да это неважно есть функция Norm. значение этой...

16
pproger
164 / 67 / 13
Регистрация: 22.03.2011
Сообщений: 196
10.11.2015, 16:45 #2
anti-k, тыж путь к файлу не передаешь
0
castaway
Эксперт С++
4920 / 3028 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
10.11.2015, 16:58 #3
Цитата Сообщение от anti-k Посмотреть сообщение
выдает ошибку параметров
???
1
nmcf
5758 / 5069 / 1734
Регистрация: 14.04.2014
Сообщений: 20,755
10.11.2015, 17:19 #4
WinExec() - obsolete. Используй system() и убери v.
1
anti-k
227 / 75 / 23
Регистрация: 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
164 / 67 / 13
Регистрация: 22.03.2011
Сообщений: 196
10.11.2015, 17:30 #6
anti-k,
Цитата Сообщение от anti-k Посмотреть сообщение
castaway,
О!, мое почтение. наконец то!!
o_O
тебе помогли его три знака вопроса? силееен.
0
castaway
Эксперт С++
4920 / 3028 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 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 / 23
Регистрация: 17.07.2015
Сообщений: 774
Завершенные тесты: 1
10.11.2015, 17:32  [ТС] #8
pproger,
Цитата Сообщение от pproger Посмотреть сообщение
тыж путь к файлу не передаешь
однозначно не помогло, НО вам тоже мое почтение!
0
nmcf
5758 / 5069 / 1734
Регистрация: 14.04.2014
Сообщений: 20,755
10.11.2015, 17:40 #9
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Если ты в текущем каталоге это делаешь, то зачем нужно вставлять туда путь?
C++
1
system("attrib +h +r *.* /S /D");
1
anti-k
227 / 75 / 23
Регистрация: 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
Эксперт С++
4920 / 3028 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
10.11.2015, 17:48 #11
Цитата Сообщение от anti-k Посмотреть сообщение
иными словами где девается слэши(в моем понимании C:\\Users\\hp\\Documents\\Visual Studio 2015\\)
Они никуда не деваются. Двойной слеш в строке - одиночный в реальности.
1
anti-k
227 / 75 / 23
Регистрация: 17.07.2015
Сообщений: 774
Завершенные тесты: 1
10.11.2015, 17:51  [ТС] #12
castaway,
Цитата Сообщение от castaway Посмотреть сообщение
Они никуда не деваются. Двойной слеш в строке - одиночный в реальности.
Чудеса!
То есть в случае
C++
1
char*pts=strchr(mass,'\\')
как раз будет искать один '\'?
0
castaway
Эксперт С++
4920 / 3028 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
10.11.2015, 17:55 #13
Цитата Сообщение от anti-k Посмотреть сообщение
как раз будет искать один '\'?
Да.
const char * s = "\\\"; - строка из двух бэкслешей.
strlen( s ) == 2
1
anti-k
227 / 75 / 23
Регистрация: 17.07.2015
Сообщений: 774
Завершенные тесты: 1
10.11.2015, 18:02  [ТС] #14
castaway, спасибо!
0
castaway
Эксперт С++
4920 / 3028 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
10.11.2015, 18:08 #15
anti-k, в моём предыдущем сообщении потерялся один бэкслеш в строке (съел форум). Их там должно быть четыре, а не три.
0
10.11.2015, 18:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.11.2015, 18:08
Привет! Вот еще темы с ответами:

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

ShellExecute WinExec .... - C++
Привет всем :)) у меня появилать очень интересная проблема с WinExec и ShellExecute Вот я запукаю с помощю программы bat файл...

Функции с переменным числом параметров - C++
#include &lt;iostream.h&gt; #include &lt;conio.h&gt; int max(int k,...) { int *p=&amp;k; int maxi; for(;k!=0;k--)

Функции с переменным числом параметров - C++
помогите доработать пожалуйсто Написать функцию kvadr с переменным числом параметров, которая определяет количество чисел,...


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

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

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