Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

26.11.2014, 02:40. Просмотров 520. Ответов 13
Метки нет (Все метки)

Доброго времени суток, уважаемый форумчанин.
Дело в том, что я уже третий час бьюсь над решением этой коварной проблемы...
Гуглил, хорошо гуглил, но ответа я так и не нашёл.
Проблема следующая - я получаю путь к программе по средствам записей в реестре, для примера возьмём
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);
Но, увы, результата нет:
Проверить наличие файлов, которые должны располагаться в том же каталоге, что и программа

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

Программа выводящая имена файлов в каталоге - C++
Пытаюсь разобраться в программе: Программа выводит имена файлов и их i-node в указанном каталоге. #include &lt;stdio.h&gt; #include...

Проверить верность утвержения о том, что значение выражения простое число - C++
Составить программу для проверки утверждение результатами вычислений по формуле X^2 +X+41 при 0&lt;=X&lt;=40 являются простые числа все...

Проверить наличие в текущем каталоге файлов одинакового размера и вывести их имена, если такие файлы имеются - PowerShell
Здрасти. Задача: проверить наличие в текущем каталоге файлов одинакового размера. Если такие файлы есть – вывести их имена. get-childitem...

Надо чтоб программа считала файл находящийся в том же каталоге что и сама програма - C#
Помогите разобраться с файлами в C# а суть в том что надо чтоб програма считала файл находящийся в том же каталоге что и сама програма(не...

Как проверить наличие подкаталога в каталоге? - VBA
Пож-ста помогите разобраться с этим вопросом. Например есть каталог 'C:first'. Как определить есть ли в этом каталоге подкаталог с...

Настройка C# + OpenGL. Где должны располагаться библиотеки, чтобы их можно было подключить - OpenGL
Скачал TaoFramework, но не пойму, куда кидать dll. Если закинуть в Sytem32, либо в каталог с проектом, то не могу подключать файлы через:...

13
dmitry94
561 / 191 / 36
Регистрация: 25.05.2012
Сообщений: 799
26.11.2014, 06:46 #2
Только один из вариантов, их множество, не знаю как ты гуглил:
strcat(papka, file1);
FileExists(papka);
0
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, ничего не вышло, вот ошибка:
Проверить наличие файлов, которые должны располагаться в том же каталоге, что и программа
0
demmax2004
60 / 138 / 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());
1
kpa6uu
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 20
26.11.2014, 10:03  [ТС] #5
Спасибо. Сейчас возможности проверить нет - на парах, но для проверки существования файлов нужна переменная типа char, а тут string, или я не прав?
0
demmax2004
60 / 138 / 35
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
26.11.2014, 10:17 #6
Не вижу ни какой логики в слове "нужно"
0
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
0
demmax2004
60 / 138 / 35
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
26.11.2014, 11:23 #8
Цитата Сообщение от kpa6uu Посмотреть сообщение
Так вот же:
Или WinAPI функция PathFileExists();
0
kpa6uu
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 20
26.11.2014, 11:36  [ТС] #9
Пойду попробую что-нибудь сообразить. Отпишу сюда же

Добавлено через 9 минут
Эхехехе, чтож такое то
0
Миниатюры
Проверить наличие файлов, которые должны располагаться в том же каталоге, что и программа  
demmax2004
60 / 138 / 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];
0
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");
}
0
demmax2004
60 / 138 / 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);
1
kpa6uu
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 20
26.11.2014, 13:16  [ТС] #13
Учту, но почему? Есть минутка на объяснение?
0
demmax2004
60 / 138 / 35
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
26.11.2014, 14:44 #14
потому что full_path1 это умная строка и методы присвоения ей значения описаны все тут
http://www.cplusplus.com/reference/string/string/
0
26.11.2014, 14:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2014, 14:44
Привет! Вот еще темы с ответами:

Проверить существование в текущем каталоге файлов, перечисленных в командной строке. - Bash
Народ, помогите пожалуйста! Надо написать скрипт по заданию: Проверить существование в текущем каталоге файлов, перечисленных в командной...

Как сделать, чтобы на страничке автоматически появлялись ссылки на файлы, находящиеся в том же каталоге что и сама страничка? - JavaScript
Как сделать, чтобы на страничке автоматически появлялись ссылки на файлы, находящиеся в том же каталоге что и сама страничка, при...

Проверить наличие музыкальных файлов в папке - C++ Qt
Нужно, имея путь к папке, проверить, есть ли там музыка, конкретно мр3. Проверить наличие конкретного файла несложно: way =...

Копирование только файлов, которые уже существуют в целевом каталоге - CMD/BAT
Из заданной директории переписать указанные шаблоном файлы в заданную директорию так, что бы были переписаны только &quot;старые&quot; (существующие...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

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