1 / 1 / 0
Регистрация: 28.10.2018
Сообщений: 102
1

Проверить существует ли файл на хостинге, если нет - показать сообщение

09.03.2019, 18:34. Показов 1541. Ответов 16
Метки нет (Все метки)

Всем привет!

Вопрос в заголовке темы, буду очень очень благодарен за помощь.
Код для dll библиотеки. Он должен работать при вызове
C++
1
int main() {}
метода

Примерно так я представляю этот код, но не знаю как правильно сделать.
C++
1
2
3
4
5
6
7
8
9
10
11
12
int main() {
 
if url("сайт/файл")
{
 
}
else
{
messagebox("файла нету")
}
 
}
Добавлено через 10 минут
Очень нужно сделать, с меня лучший выбор ответа и плюсик

Добавлено через 1 час 4 минуты
Знает кто?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.03.2019, 18:34
Ответы с готовыми решениями:

Если файл не существует, показать OpenFileDialog для его самостоятельного выбора
Здравствуйте. Нужно чтобы при загрузке программы проверялся путь к БД, если такого нет то открыть...

Добавить если не существует, показать если существует (SQL-запрос)
Мир всем и привет Как задать sql запрос в adoquery на существование записи: "если есть...

Как проверить существует ли некое правило? Если нет, то добавить его
ДОбрый вечер. У меня создаются правила с помощью assert() И каждый раз программа создает одни и...

Если файл существует то при открытии должен прочитать оттуда имя и очки и показать 5 лучших
что я неправильно пишу - или можно так, хоть что то правильно :) ? ? код если можно ..... ...

16
1500 / 964 / 811
Регистрация: 30.04.2016
Сообщений: 3,334
09.03.2019, 19:05 2
Zero4, здравствуйте! По своему опыту могу сказать (тестировал на своем собственном сайте, когда делал регистрацию для demo-версии программы), пытался изменить файл, записать туда что-то через WebClient (C#), ничего кроме как прочитать текстовый файл не получилось. Понимайте, это зависит от того разрешает ли хостинг чтение со сторонних приложений, так как MS Visual Studio, к примеру. Возможно, можно проверить его существование, но нужно рыть интернет. Кто-то, наверняка, знает.
0
109 / 84 / 55
Регистрация: 01.02.2014
Сообщений: 281
09.03.2019, 19:18 3
Используйте CurlLib:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
bool check_url(std::string url)
{
    CURL *curl;
    CURLcode response;
 
    curl = curl_easy_init();
 
    if (curl) {
        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1);
 
        /* don't write output to stdout */
        curl_easy_setopt(curl, CURLOPT_NOBODY, 1);
 
        /* Perform the request */
        response = curl_easy_perform(curl);
 
        /* always cleanup */
        curl_easy_cleanup(curl);
    }
 
    return (response == CURLE_OK);
}
1
1 / 1 / 0
Регистрация: 28.10.2018
Сообщений: 102
09.03.2019, 19:24  [ТС] 4
Цитата Сообщение от Меорн Посмотреть сообщение
Используйте CurlLib:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
bool check_url(std::string url)
{
    CURL *curl;
    CURLcode response;
 
    curl = curl_easy_init();
 
    if (curl) {
        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1);
 
        /* don't write output to stdout */
        curl_easy_setopt(curl, CURLOPT_NOBODY, 1);
 
        /* Perform the request */
        response = curl_easy_perform(curl);
 
        /* always cleanup */
        curl_easy_cleanup(curl);
    }
 
    return (response == CURLE_OK);
}
можно подробнее?
как мне этим пользоваться?
0
765 / 366 / 75
Регистрация: 10.06.2014
Сообщений: 2,408
09.03.2019, 19:28 5
Цитата Сообщение от Zero4 Посмотреть сообщение
Проверить существует ли файл на хостинге, если нет - показать сообщение
Как то расплывчиво описана задача.
Если понимать вопрос прямо и без додумываний то:
1) файл вообще может быть выше от document root, и туда по http вы не достучитесь (файл как бы есть, но проверить это не имеете право)
2) если http сервер отдает контент по адресу например site.tld/index.html, то это еще не значит что такой файл есть
вполне возможно что запрос перехватил фронт контроллер и отдал запрограммированный контент

но если надо просто проверить url на доступность
то скорее всего подойдет проверка статус кода ответа сервера
например 200 ОК - значит все норм
тут подойдет обычный HTTP клиент
0
109 / 84 / 55
Регистрация: 01.02.2014
Сообщений: 281
09.03.2019, 19:28 6
Подключить curllib и все. В url - указываете путь к файлу без протокола, то есть к примеру: "www.cyberforum.ru/customavatars/avatar817433_1.gif"
0
1 / 1 / 0
Регистрация: 28.10.2018
Сообщений: 102
09.03.2019, 19:30  [ТС] 7
Цитата Сообщение от Меорн Посмотреть сообщение
Подключить curllib и все. В url - указываете путь к файлу без протокола, то есть к примеру: "www.cyberforum.ru/customavatars/avatar817433_1.gif"
а где мне взять эту библиотеку?
есть репозиторий какой?
0
109 / 84 / 55
Регистрация: 01.02.2014
Сообщений: 281
09.03.2019, 19:33 8
Цитата Сообщение от Zero4 Посмотреть сообщение
а где мне взять эту библиотеку?
есть репозиторий какой?
https://curl.haxx.se/libcurl
0
1 / 1 / 0
Регистрация: 28.10.2018
Сообщений: 102
09.03.2019, 19:39  [ТС] 9
Цитата Сообщение от Меорн Посмотреть сообщение
это .dll или .lib?
я не нашёл готовые бинарники, есть только сорцы на гитхабе.
0
109 / 84 / 55
Регистрация: 01.02.2014
Сообщений: 281
09.03.2019, 19:45 10
Да. Нужно собирать.
Там в сырцах есть папка projects в ней проекты для MSVS готовые.
Компилировать проект libcurl.
Конфигурацию нужно выбирать LIB Debug или LIB Release.
После компиляции библиотека будет лежать в папке build.
В своей программе еще нужно не забыть указать флаг для
препроцессора CURL_STATICLIB.

Если нужно,могу выложить готовый проект с библиотекой,
для MSVS 2017. Сможете сразу попробовать работает такой метод или нет.
0
2753 / 1908 / 568
Регистрация: 05.06.2014
Сообщений: 5,559
09.03.2019, 20:00 11
Цитата Сообщение от Zero4 Посмотреть сообщение
Вопрос в заголовке темы, буду очень очень благодарен за помощь.
Попробуйте скачать файл через URLDownloadToFile. Вернуло S_OK, значит файл скачался и, очевидно, присутствует.
0
1 / 1 / 0
Регистрация: 28.10.2018
Сообщений: 102
09.03.2019, 20:18  [ТС] 12
Цитата Сообщение от Renji Посмотреть сообщение
Попробуйте скачать файл через URLDownloadToFile. Вернуло S_OK, значит файл скачался и, очевидно, присутствует.
Пробовал, ничего не происходит.
Консоль мгновенно закрывается.
Если через pause, так же ничего.
0
1 / 1 / 0
Регистрация: 28.10.2018
Сообщений: 102
11.03.2019, 15:46  [ТС] 13
Тема актуальна, так и не получилось сделать проверку.
Мне не обязательно проверять на существование файла.
Можно и просто проверить текст в txt файле на хостинге, например там 1, а в программе 2, и выдать ошибку.

Добавлено через 3 часа 24 минуты
up!
0
2753 / 1908 / 568
Регистрация: 05.06.2014
Сообщений: 5,559
11.03.2019, 16:54 14
Лучший ответ Сообщение было отмечено Zero4 как решение

Решение

Цитата Сообщение от Zero4 Посмотреть сообщение
Тема актуальна, так и не получилось сделать проверку.
Ну, показывайте что у вас там с URLDownloadToFile не получилось. Ибо вбил в онлайн-компилятор - УМВР.
C++
1
2
3
4
5
6
7
8
9
10
11
#include <urlmon.h>
#include<iostream>
#pragma comment (lib, "urlmon.lib")
using namespace std;
 
int main()
{
    auto res=URLDownloadToFile( 0, TEXT("http://ya.ru"), TEXT("test.html"), 0, 0);
    std::cout<<(res==S_OK?"OK":"error")<<std::endl;
    return 0;
}
2
1 / 1 / 0
Регистрация: 28.10.2018
Сообщений: 102
11.03.2019, 22:50  [ТС] 15
Цитата Сообщение от Renji Посмотреть сообщение
Ну, показывайте что у вас там с URLDownloadToFile не получилось. Ибо вбил в онлайн-компилятор - УМВР.
C++
1
2
3
4
5
6
7
8
9
10
11
#include <urlmon.h>
#include<iostream>
#pragma comment (lib, "urlmon.lib")
using namespace std;
 
int main()
{
    auto res=URLDownloadToFile( 0, TEXT("http://ya.ru"), TEXT("test.html"), 0, 0);
    std::cout<<(res==S_OK?"OK":"error")<<std::endl;
    return 0;
}
вот, теперь работает
сильно код я не менял

если кому надо
C++
1
2
3
4
5
6
7
8
9
auto res=URLDownloadToFile( 0, TEXT("http://ya.ru"), TEXT("test.html"), 0, 0);
if (res == S_OK)
    {
        MessageBoxA(0, 0, "yes", 0);
    }
    else
    {
        MessageBoxA(0, 0, "no", 0);
    }

а вообще работать с http request и другими запросами на си это задача сложная, т.к язык низкоуровневый.

Добавлено через 12 минут
Цитата Сообщение от Renji Посмотреть сообщение
Ну, показывайте что у вас там с URLDownloadToFile не получилось. Ибо вбил в онлайн-компилятор - УМВР.
C++
1
2
3
4
5
6
7
8
9
10
11
#include <urlmon.h>
#include<iostream>
#pragma comment (lib, "urlmon.lib")
using namespace std;
 
int main()
{
    auto res=URLDownloadToFile( 0, TEXT("http://ya.ru"), TEXT("test.html"), 0, 0);
    std::cout<<(res==S_OK?"OK":"error")<<std::endl;
    return 0;
}

подскажите еще кое что

как сделать вызов из main dll?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
BOOL WINAPI DllMain(HMODULE hDll, DWORD dwReason, LPVOID)
{
 
    if (dwReason == DLL_PROCESS_ATTACH)
    {
 
        auto res = URLDownloadToFile(0, TEXT(""), TEXT(""), 0, 0);
    if (res == S_OK)
    {
        MessageBoxA(0, 0, "yes", 0);
        
    }
    else
    {
        MessageBoxA(0, 0, "no", 0);
    }
        
 
 
    }
    return TRUE;
}
0
2753 / 1908 / 568
Регистрация: 05.06.2014
Сообщений: 5,559
11.03.2019, 23:01 16
Цитата Сообщение от Zero4 Посмотреть сообщение
как сделать вызов из main dll?
Заменить пустые кавычки нужным адресом? А вообще, MSDN честно пишет что большая часть кода в DllMain либо не работает, либо работает криво и в идеале DllMain должен быть пуст. Так что если что в DllMain крашится, значит выносите это что-то в отдельную функцию инициализации и вызывайте ее ручками.
0
1 / 1 / 0
Регистрация: 28.10.2018
Сообщений: 102
11.03.2019, 23:04  [ТС] 17
Цитата Сообщение от Renji Посмотреть сообщение
Заменить пустые кавычки нужным адресом? А вообще, MSDN честно пишет что большая часть кода в DllMain либо не работает, либо работает криво и в идеале DllMain должен быть пуст. Так что если что в DllMain крашится, значит выносите это что-то в отдельную функцию инициализации и вызывайте ее ручками.
все работает, я сразу просто не указал return 0;
спасибо за помощь!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.03.2019, 23:04
Помогаю со студенческими работами здесь

Циклом проверить файл и если он существует увеличить счетчик
for (z = 0; z &lt; count; z++) { while (q &lt; count) { ...

Как сделать так, что если файл существует return true, если нет - return false
Здравствуйте, я новичок в программировании. Мой вопрос очень прост: как сделать так, что если файл...

Как узнать сколько файлов в каталоге, и проверить, существует такой файл, или нет?
подскажите пожалуйста, как узнать сколько файлов в коталоге , и как проверить существует такой...

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

Если h-файл существует, подключить его, если не существует, проигнорировать
Как это сделать?

Проверить, существует ли каталог, и если не существует - создать
Как средствами VB6 проверить существует ли каталог, и если не существует - создать? DName$ =...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru