Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.94/34: Рейтинг темы: голосов - 34, средняя оценка - 4.94
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
1

Узнать путь до местонахождения приложения

27.12.2014, 09:24. Показов 6805. Ответов 29
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброе утро кодеры.
Подскажите, как узнать путь до приложения, но не с помощью функции GetCurrentDirectoryA.
Т.к. эта функция возвращает путь до папки, откуда начался запуск цепочки приложений.
К примеру, запустил прогу "А" из "D:/", и в проге "А" запускается прога "В", которая находится по пути "D:/apa/".
В проге "В" получаем путь GetCurrentDirectoryA - возвращает "D:/".
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.12.2014, 09:24
Ответы с готовыми решениями:

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

Узнать путь к исполняемому файлу приложения
Как узнать где находиться файл запуска моего проекта просто потом хочу привентитить относительна к...

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

Как узнать результат функции приложения A из приложения В
Приложение А работает и вернула значение функции True или False. Как узнать об этом из приложения...

29
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
27.12.2014, 10:05 2
Лучший ответ Сообщение было отмечено Randen как решение

Решение

Для Бюльдера ExtractFilePath(Application->ExeName);
В WinApi тоже должны быть подобные штуки

Добавлено через 8 минут
GetModuleFileName дает полное имя программы.
1
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
27.12.2014, 10:18  [ТС] 3
Байт, а какой функцией получить из полного имени файла путь к нему? Visual Studio 2008
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
27.12.2014, 13:00 4
Цитата Сообщение от Randen Посмотреть сообщение
какой функцией получить из полного имени файла путь к нему?
Найти последний разделитель директорий и всё что до него - будет путем.
1
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
27.12.2014, 13:07  [ТС] 5
Tulosba, думал что есть готовая для этого функция
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
27.12.2014, 13:51 6
Цитата Сообщение от Randen Посмотреть сообщение
думал что есть готовая для этого функция
Есть и готовые. Под WinAPI например:
http://msdn.microsoft.com/en-u... 85%29.aspx
0
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
27.12.2014, 14:49  [ТС] 7
Tulosba,
по вашей ссылке взял код:
C++
1
2
3
4
5
char buffer_1[ ] = "C:\\TEST\\sample.txt"; 
char *lpStr1;
lpStr1 = buffer_1;
 
PathRemoveFileSpec(lpStr1);
Выдает ошибку
error C2664: 'PathRemoveFileSpecW' : cannot convert parameter 1 from 'char *' to 'LPWSTR'
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
27.12.2014, 15:02 8
Randen, Вероятно дело в юникоде. Либо отключить его в проекте, либо использовать wchar_t вместо char
0
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
27.12.2014, 15:09  [ТС] 9
Tulosba, дак функции то нужен LPWSTR

Добавлено через 30 секунд
Tulosba, отключать юникод не вариант. wchar_t не подходит.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
27.12.2014, 15:12 10
Randen, Дык это алиас вообще-то на указатель на wchar_t
0
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
27.12.2014, 15:23  [ТС] 11
C++
1
2
3
4
5
wchar_t buffer_1[19] = "C:\\TEST\\sample.txt"; 
wchar_t *lpStr1;
lpStr1 = buffer_1;
 
PathRemoveFileSpec(lpStr1);
Ошибка:
error C2440: 'initializing' : cannot convert from 'const char [19]' to 'wchar_t [19]'
Добавлено через 7 минут
Есть вот такой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
char lp[MAX_PATH];
    GetModuleFileNameA(GetModuleHandle(NULL), lp, MAX_PATH );
    LPWSTR bug;
    bug = (LPWSTR)lp;
 
    char file_index[22] = "\\html\\index.html";
 
    wchar_t *lpStr1;
    *lpStr1 = (wchar_t)bug;
 
    PathRemoveFileSpec(lpStr1);
    
    char *lpStr2;
    *lpStr2 = (char)lpStr1;
    strcat_s(lpStr2, file_index);
 
    WebURL url(WSLit(lpStr2));
    web_view->LoadURL(url);
 
    app_->ShowMessage(lpStr2);
ШоуМеседж, отображает кракозябру... Помогите
0
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
27.12.2014, 17:32  [ТС] 12
Не знаю как тему назвать по другому.
Есть такой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
char GetFilePath(char *str) {
    char *str_return;
    char *symbol;
    int len = strlen(str);
    int len2;
    for (int i=len; i > 0; i--) {
        *symbol = str[i];
        if (symbol == "\\") {
            len2 = i;
            break;
        }
    }
    for (int i=0; i < len2; i++) {
        str_return[i] = str[i];
    }
    return *str_return;
}
Смысл функции выделить путь из строки, содержащей путь и имя файла.

Компилируется без ошибок, потом выдает ошибку на строке
C++
1
*symbol = str[i];
Что не так сделано?
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
27.12.2014, 17:36 13
Указатель не инициализирован (адреса в нём нет).
0
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
27.12.2014, 17:38  [ТС] 14
Сделал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
char GetFilePath(char *str) {
    char *str_return;
    char symbol;
    int len = strlen(str);
    int len2;
    for (int i=len; i > 0; i--) {
        symbol = str[i];
        if (symbol == '\\') {
            len2 = i;
            break;
        }
    }
    for (int i=0; i < len2; i++) {
        str_return[i] = str[i];
    }
    return *str_return;
}
Теперь работает.
Но когда закрываю приложение, выдает ошибку:
Unhandled exception at 0x0f9e3ba1 in maestro-m.exe: 0xC0000005: Access violation reading location 0x415c3d60.
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
27.12.2014, 17:41 15
Цитата Сообщение от Randen Посмотреть сообщение
C++
1
str_return[i] = str[i];
Тут тоже самое, под str_return память не выделена.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
27.12.2014, 17:42 16
Что то у Вас странное. Индексация ваще то с ноля и до длина-1.
0
47 / 28 / 12
Регистрация: 23.01.2013
Сообщений: 125
27.12.2014, 17:52 17
а возвращаемое значение тоже странное *str_return; // char[0]
может буфер еще передавать для записи выделенной подстроки?
1
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
27.12.2014, 18:06 18
Лучший ответ Сообщение было отмечено Randen как решение

Решение

Randen,
C++
1
2
3
4
5
6
7
8
9
10
11
12
const char* GetFilePath(const char* fullPath)
{
    char *path;
    int fullPathLen = strlen(fullPath), pathLen = 0;
    for (int i = fullPathLen-1; i >= 0 && !pathLen; --i)
        if (fullPath[i] == '\\')
            pathLen = i;
    path = new char[pathLen + 1];
    strncpy(path, fullPath, pathLen);
    path[pathLen] = 0;
    return path;
}
только не забудьте в программе удалить указатель на path.
1
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
27.12.2014, 18:09  [ТС] 19
Kerry_Jr, зачем делать так?
C++
1
i >= 0 && !pathLen
разве i = 0 и i <> pathlen не противоречат друг другу?
0
47 / 28 / 12
Регистрация: 23.01.2013
Сообщений: 125
27.12.2014, 18:11 20
C++
1
2
3
4
5
6
7
8
9
10
11
void GetFilePath(const char *str, char* out_path)
{
    for (size_t i = strlen(str); i > 0; --i)
    {
        if (str[i] == '\\')
        {
            strncpy(out_path, str, i);
            break;
        }
    }
}
1
27.12.2014, 18:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.12.2014, 18:11
Помогаю со студенческими работами здесь

Узнать путь к программе
Здравствуйте, подскажите, пожалуйста, как узнать путь к программе, которая запущена? :)

Узнать путь к файлу
Как узнать путь к файлу? Допустим &quot;https://www.cyberforum.ru/images/images/картинка.jpg&quot; Как с...

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

Как узнать путь к программе
У меня есть код записи программы в реестр: Reg = CreateObject(&quot;WScript.Shell&quot;) ...

Как узнать путь к файлу?
1)Допустим, мы запускаем c:/games/1.exe, 1.exe это моя программа. Как я могу получить путь к ней,...

Как узнать путь диска?
Заходишь в &quot;Мой компьютер&quot;, и там множество дисков, некоторые из них созданы командой subst,...


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

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