Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 13.02.2019
Сообщений: 12
1

открытие файла по заданному пути c ShellExecuteA

14.10.2019, 21:21. Показов 1011. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
здравствуйте. Есть вот такой код. Сейчас нас интересует часть которая начинается с else if а именно функция ShellExecuteA в этой части. Проблема в том, что если я попробую ввести в переменную path путь(например D:\work\test111.txt), то функция не откроет этот файл(хотя он там есть). Если же попробовать попробовать открыть файл который лежит в папке проекта, то все работает прекрасно. В ходе прогона через debug выяснилось, что когда я ввожу путь, первый слэш просто игнорируется и в path заносится примерно это: D:work\test111.txt. Не знаю что с этим делать, надеюсь сможете мне помочь.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
#include <string>
#include <fstream>
#include "windows.h"
#include <shellapi.h>
#include <regex>
#include <dos.h>
using namespace std;
 
int main()
{
    char path[64] = { NULL };
    char choise[10000] = "0";
    cmatch res;
    cout << "Do you want open file for watching or for editing?" << endl;
    cin.getline(choise, 10000);
    regex rx("edit");
    regex rx1("watch");
    if (regex_search(choise, res, rx)) {
        system("cls");
        cout << "Path: ";
        gets_s(path, 64);
        ofstream fout(path);
        if (fout.is_open()) {
            system("cls");
            string text;
            cout << "Write down there, what should be in the file: ";
            getline(cin, text);
            fout << text;
        }
        else
            cout << "unable to open file";
    }
    else if (regex_search(choise, res, rx1)) {
        system("cls");
        cout << "Path:\n";
        cin.getline(path, 64);
        ShellExecuteA(NULL, "open", path, NULL, NULL, SW_SHOWNORMAL);
        cout << "Do you want to see, where is your file located?" << endl;
        cout << "write yes or no: ";
        char answer[64];
        cin.getline(answer, 64);        
        regex rx2("yes");
        regex rx3("no");
        if (regex_search(answer, res, rx2)) {
            cout << "When window will be opened type in name of your file";
            Sleep(3000);
            ShellExecuteA(NULL, "find", "D:\work", NULL, NULL, SW_SHOWNORMAL);
        }
        else if (regex_search(answer, res, rx3)) {
            system("cls");
            system("pause");
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.10.2019, 21:21
Ответы с готовыми решениями:

Открытие файла по заданному пути, где запущена программа
1)Программа должна понять, в какой директории она запущена(над этим долго голову ломал так не нашел...

Открытие файла по пути
мне надо открыть файл который выбирается пользователем в диалоговом окне, но путь сохраняется без...

открытие файла по пути её нахождения
1) есть файл, в формате .rar (или другого формата, тут без разницы) на компе в далёком пути его...

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

4
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
14.10.2019, 21:39 2
БУБУН, Как (что) вводишь-то? По идее, если ввести
D:\work\test11.txt
все должно быть хорошо.
Ну и распечатывай, что ввелось
cout << path << endl;
Возможны какие-то шуточки cin.getline-а, но случай-то в общем простейший...
0
фрилансер
5498 / 5094 / 1047
Регистрация: 11.10.2019
Сообщений: 13,341
14.10.2019, 21:39 3
БУБУН, нужно экранировать бэкслеш или использовать прямой

"D:\\work\\test111.txt"
"D:/work/test111.txt"

или, если поддерживается С++14, то так
R"(D:\work\test111.txt)"

(всё это для случая, когда прописываешь в тексте программы строковую константу. Для ввода с cin экранировать не требуется)
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
14.10.2019, 21:51 4
Цитата Сообщение от Алексей1153 Посмотреть сообщение
нужно экранировать бэкслеш
При вводе - НЕ надо. Что ему? Надо в текстовых литералах, в тексте программы.
Цитата Сообщение от Алексей1153 Посмотреть сообщение
использовать прямой
Не все поймут...
0
фрилансер
5498 / 5094 / 1047
Регистрация: 11.10.2019
Сообщений: 13,341
15.10.2019, 07:26 5
Цитата Сообщение от Байт Посмотреть сообщение
При вводе - НЕ надо
это я и уточнил в последней строке
0
15.10.2019, 07:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.10.2019, 07:26
Помогаю со студенческими работами здесь

Сохранение файла по заданному пользователем пути
У меня возникла проблема, я написал программу которая по локальной сети передает файлы и она...

Открытие файла по введенному пользователем пути
Здравствуйте, мне необходима ваша помощь. Я недавно начал изучать язык С++, програмирую сам в VS...

Открытие Word файла из указанного пути
Подскажите, может кто то уже делал открытие Word файла из указанного пути. Добавлено через 2...

Открытие файла по пути, введенному с консоли
FileStream fa = new FileStream(&quot;путь&quot;, FileMode.Open, FileAccess.Read); Как загнать сюда путь...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru