Member 12778141 Ответов: 1

C++ мой код не загружает файл на FTP-сервер


в коде нет ошибки, я устал много способов исправить ее, но она просто не работает. информация о сервере верна его подключению на filezilla. но моя программа закрыта, хотя я не набрал return 0... что бы здесь ни было исходным кодом, я сделал много небольших изменений после версии thgis, но все еще не работает.



[^]

#include <Windows.h>
#include <wininet.h> 
#include <iostream>

#pragma comment(lib, "Wininet")

using namespace std;
void FileSubmit()
{
	HINTERNET hInternet;
	HINTERNET hFtpSession;
	hInternet = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
	if (hInternet == NULL)
	{
		cout << "Error: " << GetLastError();
	}
	else
	{
		hFtpSession = InternetConnect(hInternet, "XXX", INTERNET_DEFAULT_FTP_PORT, "XXX", "XXX", INTERNET_SERVICE_FTP, 0, 0);
		if (hFtpSession == NULL)
		{
			cout << "Error: " << GetLastError();
		}
		else
		{

			if(FtpPutFile(hFtpSession, "C://Users//Elliot//Desktop//file.txt", "file.txt", FTP_TRANSFER_TYPE_BINARY, 0));
			

		}
	}
}

int main()
{
	FileSubmit();
	
}



Примечание: информация сервера цензурирована

Что я уже пробовал:

простые изменения в коде
я проверил брандмауэр
я попытался подключиться через filezilla на сервер

jeron1

Вы пробовали пройти через код с помощью отладчика?

Member 12778141

он закрывается сам, не дожидаясь шага ... и я новичок в использовании отладчика, я был бы рад, если бы вы могли мне помочь.

jeron1

Это зависит от используемой среды разработки, например, следующая ссылка будет полезна для Visual Studio 2010. Освоение отладки в Visual Studio 2010 - руководство для начинающих[^] Кроме того, что вы хотите сделать, если FtpPutFile() возвращает false?

Member 12778141

я использую VS 2015, но они должны быть почти одинаковыми, я думаю. я посмотрю на него, спасибо.

jeron1

Это действительно одна из самых важных вещей, которые вы можете узнать. Установите точку останова в вызове InternetOpen (), затем пройдите через каждую из следующих строк, проверяя значения переменных, входящих в вызовы функций, возвращаемые значения из вызовов функций и т. д.

1 Ответов

Рейтинг:
1

Jochen Arndt

Вы не распечатали информацию об ошибке, когда FtpPutFile неудачи. Измените свой код, чтобы распечатать эту информацию и закрыть дескрипторы:

void FileSubmit()
{
    HINTERNET hInternet;
    HINTERNET hFtpSession;
    hInternet = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
    if (hInternet == NULL)
    {
        cout << "Error: InternetOpen = " << GetLastError() << endl;
    }
    else
    {
        hFtpSession = InternetConnect(hInternet, "XXX", INTERNET_DEFAULT_FTP_PORT, "XXX", "XXX", INTERNET_SERVICE_FTP, 0, 0);
        if (hFtpSession == NULL)
        {
            cout << "Error: InternetConnect = " << GetLastError() << endl;
        }
        else
        {
            if (FtpPutFile(hFtpSession, "C://Users//Elliot//Desktop//file.txt", "file.txt", FTP_TRANSFER_TYPE_BINARY, 0))
                cout << "File send" << endl;
            else
                cout << "Error: FtpPutFile = " << GetLastError() << endl;
            InternetCloseHandle(hFtpSession);
        }
        InternetCloseHandle(hInternet);
    }
}