Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/16: Рейтинг темы: голосов - 16, средняя оценка - 4.63
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3

Почему функция WinExec не запускает текстовый файл?

03.02.2011, 12:43. Показов 3259. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Почему функция WinExec не запускает текстовый файл?
C++
1
2
3
4
5
6
7
8
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String filename = "1.txt";
String before = ExtractFilePath(Application->ExeName)+filename;
String after = StringReplace(before,"\\","\\\\",TReplaceFlags() << rfReplaceAll);
//ShowMessage("before = " + before+"\n"+"after =" + after);
WinExec(after.c_str(),SW_SHOW);
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.02.2011, 12:43
Ответы с готовыми решениями:

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

WinExec не запускает wordpad
Народ не запускается wordpad(все остальное так работат.// 'calc.exe' , 'explorer.exe&quot;.......) Пробовал 1....

Почему текстовый файл пустой?
Среда разработки Intellij IDEA. import java.util.Formatter; import java.util.Scanner; public class Main { static...

10
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
03.02.2011, 13:42
1. WinExec - устаревшая функция, используется только для совместимости с 16-битной Windows. Не рекомендуется к использованию в Win32-приложениях.
C++
1
2
3
4
5
6
7
UnicodeString filename = "1.txt";
UnicodeString before = ExtractFilePath(Application->ExeName)+filename;
UnicodeString after = StringReplace(before,"\\","\\\\",TReplaceFlags() << rfReplaceAll);
//  //ShowMessage("before = " + before+"\n"+"after =" + after);
//  WinExec(after.c_str(),SW_SHOW);
ShellExecute(Handle, L"open", after.c_str(),0,  0, SW_SHOWNORMAL);
}
Для ВСВ6 - AnsiString и просто "open" .
1
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
03.02.2011, 13:52  [ТС]
Спасибо.

Я вообще и думал изначально воспользоваться функцией ShellExecute. А зачем ты букву L ставишь перед словом open? Я и без неё запускаю
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
03.02.2011, 13:55
Цитата Сообщение от Sasha Посмотреть сообщение
А зачем ты букву L ставишь перед словом open? Я и без неё запускаю
- RADXE ругается :
[BCC32 Error] Unit.cpp(26): E2342 Type mismatch in parameter 'lpOperation' (wanted 'const wchar_t *', got 'const char *')
Если уж очень приспичило с WinExec, то можно так :
C++
1
2
3
WinExec( AnsiString(
"c:\\windows\\system32\\notepad.exe c:\\Temp\\2\\Debug\\Win32\\1.txt")
.c_str(),SW_SHOW);
- т.е., с указанием приложения и полного пути.
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
03.02.2011, 14:01  [ТС]
Заметил одну особенность, что так:
C++
1
ShellExecute(Handle, "open", after.c_str(), 0,  0, SW_SHOWNORMAL);
или так
C++
1
ShellExecute(Handle, "open", before.c_str(), 0,  0, SW_SHOWNORMAL);
Всё равно файл запускается.
Тогда зачем строку путь преобразовывать с 2-мя слешами? Можешь пояснить причину для каких целей это можно использовать?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
03.02.2011, 14:08
Цитата Сообщение от Sasha Посмотреть сообщение
Тогда зачем строку путь преобразовывать с 2-мя слешами? Можешь пояснить причину для каких целей это можно использовать?
- я не знаю, кто тебе советовал это делать в данном случае
C++
1
2
3
UnicodeString filename = "1.txt";
UnicodeString before = ExtractFilePath(Application->ExeName)+filename;
ShellExecute(Handle, L"open", before.c_str(),0,  0, SW_SHOWNORMAL);
- прекрасно работает. По умолчанию слэш \ - символ служебный, так он и будет восприниматься , если указать путь c:\Temp\2\Debug\Win32\1.txt - будет ошибка, а в выражении c:\\Temp\\2\\Debug\\Win32\\1.txt первый слэш "экранирует" второй, указывая компилятору, что это не служебный символ. Так же, как в строке "Это ковычка \" в строке" - необходимо экранировать " . Шо то я сильно сомневаюсь, что ты этого не знал...
1
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
03.02.2011, 14:14  [ТС]
Цитата Сообщение от LK Посмотреть сообщение
я не знаю, кто тебе советовал это делать
Ты и посоветовал в этой теме
https://www.cyberforum.ru/cpp-... 33245.html
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
03.02.2011, 14:19
- понятно ,
Цитата Сообщение от User_
Получаю путь к папке с помощью функции GetItemPath() (получаю например c:\windows).
Мне этот путь потребуется использовать дальше в программе, то есть он должен быть записан через двойной слеш. Как это сделать?
- там изначально в полученном пути не было двойных слэшей - "например c:\windows" , поэтому человеку и потребовалась замена. Для ExtractFilePath(Application->ExeName) нужды в этом нет.
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
03.02.2011, 14:25  [ТС]
Кстати двойная наклонная константа используется в строковых константах
BORLAND C++ BUILDER. ОСВОЙ САМОСТОЯТЕЛЬНО Кент Рейсдорф и Кен Хендерсон стр.128

Добавлено через 3 минуты
Ок спасибо за разъяснение. Тогда я строку с функцией StringReplace удаляю.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
03.02.2011, 14:25
ОК, удаляй .
Кстати двойная наклонная константа используется в строковых константах
Ага, почувствуйте разницу:
C++
1
2
ShowMessage("просто \n просто");
ShowMessage("просто \\n просто");
.
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
03.02.2011, 14:27  [ТС]
Кстати я только, что по дебагеру посмотрел, там действительно строка пути в памяти, стоит уже с двойным слешом
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.02.2011, 14:27
Помогаю со студенческими работами здесь

Почему полностью не считывает текстовый файл?
Задание: Текстовый файл содержит записи о телефонах и их владельцах. Переписать в другой файл телефоны тех владельцев, фамилии которых...

Почему программа не открывает текстовый файл?
все работает, и данные из файла считывает и создает др. файл и записывает туда значение. но не открывает #include &lt;stdio.h&gt; ...

Почему не работает вывод в текстовый файл?
#include &lt;iostream&gt; #include &lt;windows.h&gt; #include &lt;iomanip&gt; #include &lt;string.h&gt; #include &lt;fstream&gt; using namespace std; ...

Почему в текстовый файл записывает мусор
Не могу понять. Написала программу program my8; uses crt; var sum,i,n:integer; x:array of integer; f: file of integer; ...

Функция, проверяющая, является ли текстовый файл пустым
У меня вопрос: Есть ли в с++ функция возвращающая истину если открытый на чтение txt файл пустой?? Добавлено через 4 минуты Если нет...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru