Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème utilisation d'InternetGetLastResponseInfo // Upload fichier c++

5 réponses
Avatar
Charles AHMADZADEH
Bonjour, dans le cadre d'un stage, je dois réaliser un programme qui doit
entre-autres être capable d'uploader un fichier (.txt en l'occurence) sur un
serveur ftp.
Le code m'a l'air correct cepdendant le fichier ne s'upload pas et la
fonciton ftpPut renvoie 0 (signalant une erreur). Je précise que je débute
en programmation ;)

J'ai donc utilisé GetLastError et obtenu un code 12003: utilisez la fonction
InternetGetLastResponseInfo() et Je n'arrive pas à utiliser cette fonction
(comment initialiser les buffers, etc...). Cette fonction fait planter mon
programme et cela m'empeche d'avancer dans mon projet puisque je ne peux pas
récuperer le messsage d'erreur ^^. De plus, impossible de trouver un exemple
sur internet (à l'instar de GetLastError).

C'est réalisé sous Dev-C++, le fichier local est dans le répertoire du main
ainsi que dans le répertoire de mon code source "upload.cpp".
L'ordinateur sur lequel je lance le programme possède les autorisations
nécessaires pour créer un fichier sur le serveur.

Merci d'avance pour l'aide.


Code (sans les include):

#define FTPSERV "ftp.blablabla.com" // Serveur
#define FTPUSER "user" // Login
#define FTPPASS "pass" // Password
#define SRCFILE "log_SR28.txt" // Fichier local
#define DSTFILE "log_SR28up" // Fichier distant

using namespace std;

bool upload ()
{
HINTERNET hInet, hFTP;
bool succes_up;
//Variables de GetLastError
LPTSTR pszMessage, lpszBuffer;
DWORD dwLastError;
LPDWORD lpdwError;
LPDWORD lpdwBufferLength;

LoadLibrary("../ftplib-3.1-1/winnt/Release/FTPlib.dll" );
LoadLibrary("../wininet.dll" );

if((hInet = InternetOpen("ftp.blablabla.com/projet/",
INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0)) != INVALID_HANDLE_VALUE)
//ftp.blablabla.com/projet/ est le répertoire du ftp dans
// lequel je souhaite upload mon fichier.
{
if((hFTP = InternetConnect(hInet, FTPSERV, 21, FTPUSER, FTPPASS,
INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0)) != INVALID_HANDLE_VALUE)
{
succes_up = FtpPutFile(hFTP, SRCFILE, DSTFILE,
FTP_TRANSFER_TYPE_BINARY, 0); // succes_up = 0, l'upload n'a pas marché.
InternetOpen et InternetConnect renvoient 1.

//Get Last Error
dwLastError = GetLastError();
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_IGNORE_INSERTS, NULL,
dwLastError,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),(LPTSTR)&pszMessage,0, NULL );
wprintf(L"\nfailed with error %d: %s", dwLastError,
pszMessage); // Code 12003: Use InternetGetLasResponseInfo pour récupérer
le message

//Internet response info
InternetGetLastResponseInfo(lpdwError,lpszBuffer,lpdwBufferLength);
// Je ne sais pas comment initialiser les variables utilisées par cette
fonction, et impossible de trouver un exemple sur internet ...

InternetCloseHandle(hFTP);
}
InternetCloseHandle(hInet);
}
return succes_up;
}

5 réponses

Avatar
Charles AHMADZADEH
Désolé si j'ai envoyé plusieur fois le même message, c'est la première fois
que j'utilise un NewsGroup.

"Charles AHMADZADEH" a écrit dans le message
de news:gcii58$g6o$
Bonjour, dans le cadre d'un stage, je dois réaliser un programme qui doit
entre-autres être capable d'uploader un fichier (.txt en l'occurence) sur
un serveur ftp.
Le code m'a l'air correct cepdendant le fichier ne s'upload pas et la
fonciton ftpPut renvoie 0 (signalant une erreur). Je précise que je débute
en programmation ;)

J'ai donc utilisé GetLastError et obtenu un code 12003: utilisez la
fonction InternetGetLastResponseInfo() et Je n'arrive pas à utiliser cette
fonction (comment initialiser les buffers, etc...). Cette fonction fait
planter mon programme et cela m'empeche d'avancer dans mon projet puisque
je ne peux pas récuperer le messsage d'erreur ^^. De plus, impossible de
trouver un exemple sur internet (à l'instar de GetLastError).

C'est réalisé sous Dev-C++, le fichier local est dans le répertoire du
main ainsi que dans le répertoire de mon code source "upload.cpp".
L'ordinateur sur lequel je lance le programme possède les autorisations
nécessaires pour créer un fichier sur le serveur.

Merci d'avance pour l'aide.


Code (sans les include):

#define FTPSERV "ftp.blablabla.com" // Serveur
#define FTPUSER "user" // Login
#define FTPPASS "pass" // Password
#define SRCFILE "log_SR28.txt" // Fichier local
#define DSTFILE "log_SR28up" // Fichier distant

using namespace std;

bool upload ()
{
HINTERNET hInet, hFTP;
bool succes_up;
//Variables de GetLastError
LPTSTR pszMessage, lpszBuffer;
DWORD dwLastError;
LPDWORD lpdwError;
LPDWORD lpdwBufferLength;

LoadLibrary("../ftplib-3.1-1/winnt/Release/FTPlib.dll" );
LoadLibrary("../wininet.dll" );

if((hInet = InternetOpen("ftp.blablabla.com/projet/",
INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0)) != INVALID_HANDLE_VALUE)
//ftp.blablabla.com/projet/ est le répertoire du ftp dans // lequel je
souhaite upload mon fichier.
{
if((hFTP = InternetConnect(hInet, FTPSERV, 21, FTPUSER, FTPPASS,
INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0)) != INVALID_HANDLE_VALUE)
{
succes_up = FtpPutFile(hFTP, SRCFILE, DSTFILE,
FTP_TRANSFER_TYPE_BINARY, 0); // succes_up = 0, l'upload n'a pas
marché. InternetOpen et InternetConnect renvoient 1.

//Get Last Error
dwLastError = GetLastError();
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_IGNORE_INSERTS, NULL,
dwLastError, MAKELANGID(LANG_NEUTRAL,
SUBLANG_DEFAULT),(LPTSTR)&pszMessage,0, NULL );
wprintf(L"nfailed with error %d: %s", dwLastError,
pszMessage); // Code 12003: Use InternetGetLasResponseInfo pour récupérer
le message

//Internet response info
InternetGetLastResponseInfo(lpdwError,lpszBuffer,lpdwBufferLength);
// Je ne sais pas comment initialiser les variables utilisées par cette
fonction, et impossible de trouver un exemple sur internet ...

InternetCloseHandle(hFTP);
}
InternetCloseHandle(hInet);
}
return succes_up;
}





Avatar
Christian ASTOR
On 8 oct, 16:56, "Charles AHMADZADEH"
wrote:
Bonjour, dans le cadre d'un stage, je dois réaliser un programme qui do it
entre-autres être capable d'uploader un fichier (.txt en l'occurence) s ur un
serveur ftp.
Le code m'a l'air correct cepdendant le fichier ne s'upload pas et la
fonciton ftpPut renvoie 0 (signalant une erreur). Je précise que je d ébute
en programmation ;)

J'ai donc utilisé GetLastError et obtenu un code 12003: utilisez la fon ction
InternetGetLastResponseInfo() et Je n'arrive pas à utiliser cette fonct ion



Par ex,

TCHAR szError[MAX_PATH];
DWORD dwError, dwSize;
dwSize = ARRAYSIZE(szError);
BOOL bRet = InternetGetLastResponseInfo(&dwError, szError, &dwSize);

Et en général, on fait un FtpSetCurrentDirectory() avant FtpPutFile(),
sinon, il va dans le home du user...
Avatar
Bertrand
Christian ASTOR wrote:

Par ex,

TCHAR szError[MAX_PATH];
DWORD dwError, dwSize;
dwSize = ARRAYSIZE(szError);
BOOL bRet = InternetGetLastResponseInfo(&dwError, szError, &dwSize);

Et en général, on fait un FtpSetCurrentDirectory() avant FtpPutFile(),
sinon, il va dans le home du user...




Oui, car le premier parametre de InternetOpen n'est pas significatif
Les LoadLibrary ne servent a rien non plus..
Avatar
Charles AHMADZADEH
"Bertrand" a écrit dans le message de
news:gcjg8b$knk$
Christian ASTOR wrote:

Par ex,

TCHAR szError[MAX_PATH];
DWORD dwError, dwSize;
dwSize = ARRAYSIZE(szError);
BOOL bRet = InternetGetLastResponseInfo(&dwError, szError, &dwSize);

Et en général, on fait un FtpSetCurrentDirectory() avant FtpPutFile(),
sinon, il va dans le home du user...




Oui, car le premier parametre de InternetOpen n'est pas significatif
Les LoadLibrary ne servent a rien non plus..



Merci beaucoup, j'arrive à récupérer l'erreur. Ca doit surement venir d'un
paramétrage d'accès au serveur (surement mauvais port).

200 Type set to I.
227 Entering Passive Mode (195,171,131,
550 log_SR28up.txt: Access is denied.
Avatar
felix
"Charles AHMADZADEH" wrote in message
news:gckot8$dv4$

Merci beaucoup, j'arrive à récupérer l'erreur. Ca doit surement venir d'un
paramétrage d'accès au serveur (surement mauvais port).

200 Type set to I.
227 Entering Passive Mode (195,171,131,
550 log_SR28up.txt: Access is denied.



Si c'était le port, tu ne pourrais pas te connecter.
"Access is denied.", c'est plutot les droits d'accès de l'utilisateur dans
le répertoire défaut