Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Siborgium
0 / 0 / 0
Регистрация: 04.12.2015
Сообщений: 39
#1

Нахождение пути к папке с файлом - C++

27.12.2015, 18:41. Просмотров 187. Ответов 6
Метки нет (Все метки)

Есть запускаемый бинарник. Есть задача - запустить файл .wav, лежащий в той же папке, что и запускаемый бинарник.
Как это сделать максимально просто и быстро, не зная пути к папке, и возможно, сменяя этот путь - мне нужно, чтобы все работало и на другом диске, и на другой папке?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.12.2015, 18:41     Нахождение пути к папке с файлом
Посмотрите здесь:

Нахождение критического пути C++
Нахождение кратчайшего пути от одной вершины графа до другой C++
Нахождение эйлерова пути C++
нахождение времени, потраченного на прохождение путником половины пути C++
Нахождение в орграфе пути максимальной длины от 1-ой вершины до последней C++
Графы. Нахождение максимального пути C++
Функция для узнавания пути к системной папке C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mesteriis
372 / 155 / 40
Регистрация: 08.08.2015
Сообщений: 1,104
Завершенные тесты: 1
27.12.2015, 18:45     Нахождение пути к папке с файлом #2
Цитата Сообщение от Siborgium Посмотреть сообщение
лежащий в той же папке
Он всегда рядом? Если да то самый простой способ это отдать команду консольке через system("command");
Siborgium
0 / 0 / 0
Регистрация: 04.12.2015
Сообщений: 39
27.12.2015, 19:05  [ТС]     Нахождение пути к папке с файлом #3
Поподробнее, пожалуйста.
Mesteriis
372 / 155 / 40
Регистрация: 08.08.2015
Сообщений: 1,104
Завершенные тесты: 1
27.12.2015, 20:32     Нахождение пути к папке с файлом #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Siborgium, да вроде куда подробнее, например мне надо запустить файл test.wav, при условии что он рядом, я в коде пишу
C++
1
system ("test.wav");
файл откроется программой по умолчанию и будет воспроизводиться, собственно произойдет тоже самое если вы откроете консоль, перейдет в папку с файлом и напишите его имя, с клацанем интер. если требует проиграть его не придется к сторонниу решению, то это уже платформозависимая вещь, и в каждом случае отдельная песня, но кстати в качестве критике wav формат не рекомендую!
Геомеханик
528 / 335 / 256
Регистрация: 26.06.2015
Сообщений: 765
28.12.2015, 11:11     Нахождение пути к папке с файлом #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Если для windows, то вот накидал.
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <windows.h>
#include <tchar.h>
#include <string.h>
#include <stdio.h>
#include <locale.h>
BOOL getCurDirA(LPSTR d);
BOOL getCurDirW(LPWSTR d);
BOOL getCurDir(LPTSTR d);
 
int main(void){
    setlocale(LC_ALL, "rus");
 
    char a[MAX_PATH];
    char m1[] = "ansi.wav";
    if(getCurDirA(a))
        puts( strcat(a, m1) );
 
    wchar_t w[MAX_PATH];
    wchar_t m2[] = L"unicode.wav";
    if(getCurDirW(w))
        _putws( wcscat(w, m2) );
 
    TCHAR t[MAX_PATH];
    TCHAR m3[] = _T("type.wav");
    if(getCurDir(t))
        _putts( _tcscat(t, m3) );
    return 0;
}
 
//ANSI
BOOL getCurDirA(LPSTR d){
    LPCSTR t, q, p = GetCommandLineA();
    if(*p == '"'){
        for(q = t = ++p; *p && (*p != '"'); ++p){
            if(*p == '\\')
                t = p;
        }
        if(*p == '"'){
            while(q <= t)
                *d++ = *q++;
            *d = '\0';
            return TRUE;
        }
    }
    return FALSE;
}
 
//UNICODE
BOOL getCurDirW(LPWSTR d){
    LPCWSTR t, q, p = GetCommandLineW();
    if(*p == L'"'){
        for(q = t = ++p; *p && (*p != L'"'); ++p){
            if(*p == L'\\')
                t = p;
        }
        if(*p == L'"'){
            while(q <= t)
                *d++ = *q++;
            *d = L'\0';
            return TRUE;
        }
    }
    return FALSE;
}
 
//предопределенный тип
BOOL getCurDir(LPTSTR d){
    LPCTSTR t, q, p = GetCommandLine();
    if(*p == _T('"')){
        for(q = t = ++p; *p && (*p != _T('"')); ++p){
            if(*p == _T('\\'))
                t = p;
        }
        if(*p == _T('"')){
            while(q <= t)
                *d++ = *q++;
            *d = _T('\0');
            return TRUE;
        }
    }
    return FALSE;
}
Убежденный
Системный программист
Эксперт С++
14890 / 6708 / 1059
Регистрация: 02.05.2013
Сообщений: 11,000
Завершенные тесты: 1
28.12.2015, 11:22     Нахождение пути к папке с файлом #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Siborgium Посмотреть сообщение
Как это сделать максимально просто и быстро, не зная пути к папке, и возможно, сменяя этот путь - мне нужно, чтобы все работало и на другом диске, и на другой папке?
GetModuleFileName с NULL. Получаешь полный путь к exe-файлу.
Дальше отрезаешь последний элемент пути и добавляешь имя своего файла.
Все.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.12.2015, 11:24     Нахождение пути к папке с файлом
Еще ссылки по теме:

Нахождение кратчайшего пути в графе, алгоритм Уоршелла C++
Нахождение пути от одной ячейки к другой в массиве C++
C++ Нахождение кратчайшего пути, поиск с возвратом
C++ Графы, нахождение наименьшего пути между вершинами обходом в ширину
C++ Нахождение кратчайшего пути

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

Или воспользуйтесь поиском по форуму:
Siborgium
0 / 0 / 0
Регистрация: 04.12.2015
Сообщений: 39
28.12.2015, 11:24  [ТС]     Нахождение пути к папке с файлом #7
Благодарю, возьму себе. Рад, что вам не лень было писать столько.
Yandex
Объявления
28.12.2015, 11:24     Нахождение пути к папке с файлом
Ответ Создать тему
Опции темы

Текущее время: 07:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru