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

Проверить наличие файлов, которые должны располагаться в том же каталоге, что и программа - C++

Восстановить пароль Регистрация
 
kpa6uu
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 20
26.11.2014, 02:40     Проверить наличие файлов, которые должны располагаться в том же каталоге, что и программа #1
Доброго времени суток, уважаемый форумчанин.
Дело в том, что я уже третий час бьюсь над решением этой коварной проблемы...
Гуглил, хорошо гуглил, но ответа я так и не нашёл.
Проблема следующая - я получаю путь к программе по средствам записей в реестре, для примера возьмём
C:\Programm

Мне нужно проверить наличие файлов, которые должны располагаться в том же каталоге, что и программа.
Проверяю следующим кодом:
C++
1
2
3
4
5
6
#include <io.h>
 
bool FileExists(const char *fname)
{
    return access(fname, 0) != -1;
}
Всё было бы хорошо, но я не знаю каким образом можно сложить две строки...(повторюсь, я гуглил)
Т.е. в переменной
C++
1
char papka[255];
хранится путь к папке с программой, а в переменной
C++
1
char file1[255] = "\\Conf\\123.ini";
располагается путь к файлу(C:\Programm\Conf\123.ini);

Пытаюсь сделать что-то вроде
C++
1
FileExists(papka + file1);
Но, увы, результата нет:
Проверить наличие файлов, которые должны располагаться в том же каталоге, что и программа

Надеюсь ты подскажешь в каком направлении "копать", может я совсем не в те дебри залез?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2014, 02:40     Проверить наличие файлов, которые должны располагаться в том же каталоге, что и программа
Посмотрите здесь:

C++ Обход всех файлов в каталоге
Вывести список файлов в каталоге C++
C++ Ошибка на этапе выполнения при том, что программа выполняется до конца
C++ Удаление файлов в каталоге
Программа выводящая имена файлов в каталоге C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dmitry94
517 / 187 / 34
Регистрация: 25.05.2012
Сообщений: 780
26.11.2014, 06:46     Проверить наличие файлов, которые должны располагаться в том же каталоге, что и программа #2
Только один из вариантов, их множество, не знаю как ты гуглил:
strcat(papka, file1);
FileExists(papka);
kpa6uu
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 20
26.11.2014, 08:28  [ТС]     Проверить наличие файлов, которые должны располагаться в том же каталоге, что и программа #3
Я гуглил strcat. Всё бы хорошо, но мне нужно проверить не один файл в папке, а несколько.
Если же я использую strcat(papka, file1), то на следующий раз, т.е. (strcat(papka, file2)) в переменной papka у меня уже будет не C:\Programm, а C:\Programm\Conf\123.ini.
Пытался приравнять несколько переменных переменной papka, ничего не вышло, вот ошибка:
Проверить наличие файлов, которые должны располагаться в том же каталоге, что и программа
demmax2004
57 / 135 / 35
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
26.11.2014, 08:32     Проверить наличие файлов, которые должны располагаться в том же каталоге, что и программа #4
C++
1
2
3
char papka[MAX_PATH];
char file1[MAX_PATH];
lstrcpy(papka, file1);
ну или
C++
1
2
3
4
5
6
7
#include <shlwapi.h>
#pragma comment(lib, "Shlwapi.lib")
 
std::string full_path = "C:\\Programm";
std::string file = "\\Conf\\123.ini";
full_path = full_path + file;
PathFileExists(full_path.c_str());
kpa6uu
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 20
26.11.2014, 10:03  [ТС]     Проверить наличие файлов, которые должны располагаться в том же каталоге, что и программа #5
Спасибо. Сейчас возможности проверить нет - на парах, но для проверки существования файлов нужна переменная типа char, а тут string, или я не прав?
demmax2004
57 / 135 / 35
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
26.11.2014, 10:17     Проверить наличие файлов, которые должны располагаться в том же каталоге, что и программа #6
Не вижу ни какой логики в слове "нужно"
kpa6uu
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 20
26.11.2014, 11:03  [ТС]     Проверить наличие файлов, которые должны располагаться в том же каталоге, что и программа #7
Так вот же:
C++
1
2
3
4
bool FileExists(const char *fname)
{
    return access(fname, 0) != -1;
}
const char
demmax2004
57 / 135 / 35
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
26.11.2014, 11:23     Проверить наличие файлов, которые должны располагаться в том же каталоге, что и программа #8
Цитата Сообщение от kpa6uu Посмотреть сообщение
Так вот же:
Или WinAPI функция PathFileExists();
kpa6uu
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 20
26.11.2014, 11:36  [ТС]     Проверить наличие файлов, которые должны располагаться в том же каталоге, что и программа #9
Пойду попробую что-нибудь сообразить. Отпишу сюда же

Добавлено через 9 минут
Эхехехе, чтож такое то
Миниатюры
Проверить наличие файлов, которые должны располагаться в том же каталоге, что и программа  
demmax2004
57 / 135 / 35
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
26.11.2014, 11:38     Проверить наличие файлов, которые должны располагаться в том же каталоге, что и программа #10
Это потому что у тебя юникодный проект, и поумолчанию используется wchar_t а не char
определи
C++
1
2
wchar_t file[MAX_PATH];
wchar_t papka[MAX_PATH];
kpa6uu
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 20
26.11.2014, 12:26  [ТС]     Проверить наличие файлов, которые должны располагаться в том же каталоге, что и программа #11
В общем вот:

Проверить наличие файлов, которые должны располагаться в том же каталоге, что и программа

Я уже действительно без понятия что можно сделать. В теории всё должно работать безупречно, но на практике - ни черта подобного.
В командной строке вместо \Soft.exe и \Config\setting.ini должно быть Путь, который вытянули из реестра\Soft.exe и т.п.

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
#include <iostream>
#include <shlwapi.h>
#pragma comment(lib, "Shlwapi.lib")
 
int main()
{
    DWORD BufSize = _MAX_PATH;
    HKEY hKey;
    LSTATUS st;
    std::string full_path1, full_path2, file1 = "\\Soft.exe", file2 = "\\Config\\setting.ini";
 
    //# Ищу в первом разделе реестра
    st = RegOpenKeyExA(HKEY_LOCAL_MACHINE,
        "SOFTWARE\\Wow6432Node\\Valve\\Steam",
        0,
        KEY_QUERY_VALUE,
        &hKey);
    //# Если такой раздел есть
    if (st == ERROR_SUCCESS)
    {
        RegQueryValueExA(hKey, "InstallPath", NULL, NULL, (LPBYTE)&full_path1, &BufSize);
        RegQueryValueExA(hKey, "InstallPath", NULL, NULL, (LPBYTE)&full_path2, &BufSize);
 
        //# Ввод переменных под директории
        full_path1 = full_path1 + file1;
        full_path2 = full_path2 + file2;
        std::cout << std::endl;
        printf("%s", full_path1.c_str());
        std::cout << std::endl;
        printf("%s", full_path2.c_str());
        std::cout << std::endl;
 
        //# Проверяем наличие файлов
        if (PathFileExistsA(full_path1.c_str()) && PathFileExistsA(full_path2.c_str()))
        {
            std::cout << "O daaaa!" << std::endl;
        }
        else
        {
            std::cout << "ooo neeet!" << std::endl;
        }
    }
    system("pause");
}
demmax2004
57 / 135 / 35
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
26.11.2014, 13:01     Проверить наличие файлов, которые должны располагаться в том же каталоге, что и программа #12
(LPBYTE)&full_path1
никогда не делай так

C++
1
2
3
4
5
6
7
8
9
10
#include <tchar.h>
#include <Shlwapi.h>
#pragma comment(lib, "Shlwapi.lib")
 
TCHAR full_path1[MAX_PATH];
TCHAR file1[] = _T("Soft.exe");
RegQueryValueEx(hKey, _T("InstallPath"), NULL, NULL, (LPBYTE)full_path1, &BufSize);
PathAddBackslash(full_path1);
lstrcat(full_path1, file1);
PathFileExists(full_path1);
kpa6uu
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 20
26.11.2014, 13:16  [ТС]     Проверить наличие файлов, которые должны располагаться в том же каталоге, что и программа #13
Учту, но почему? Есть минутка на объяснение?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2014, 14:44     Проверить наличие файлов, которые должны располагаться в том же каталоге, что и программа
Еще ссылки по теме:

C++ Размер файлов в каталоге
C++ Получить список файлов в каталоге
C++ Список файлов в указанном каталоге

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

Или воспользуйтесь поиском по форуму:
demmax2004
57 / 135 / 35
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
26.11.2014, 14:44     Проверить наличие файлов, которые должны располагаться в том же каталоге, что и программа #14
потому что full_path1 это умная строка и методы присвоения ей значения описаны все тут
http://www.cplusplus.com/reference/string/string/
Yandex
Объявления
26.11.2014, 14:44     Проверить наличие файлов, которые должны располагаться в том же каталоге, что и программа
Ответ Создать тему
Опции темы

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