【发布时间】:2023-04-08 18:25:01
【问题描述】:
WinINET 的FtpPutFile() 函数有问题。
代码如下:
#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: InternetOpen = " << GetLastError() << endl;
}
else
{
hFtpSession = InternetConnect(hInternet, "host", INTERNET_DEFAULT_FTP_PORT, "name", "pass", INTERNET_SERVICE_FTP, 0, 0);
if (hFtpSession == NULL)
{
cout << "Error: InternetConnect = " << GetLastError() << endl;
}
else
{
if (FtpPutFile(hFtpSession, "C:\\Utenti\\Luca\\Desktop\\pop.txt", "pop.txt", FTP_TRANSFER_TYPE_BINARY, 0))
cout << "File send" << endl;
else
cout << "Error: FtpPutFile = " << GetLastError() << endl;
InternetCloseHandle(hFtpSession);
}
InternetCloseHandle(hInternet);
}
}
int main()
{
FileSubmit();
return 0;
}
该程序确实连接到 Internet,但似乎无法发送文件。 GetLastError() 返回错误代码 3。可能是因为我使用了错误的路径语法?
【问题讨论】:
-
您的路径语法适用于字符串文字。其他事情正在发生。您确定
C:\Utenti\Luca\Desktop文件夹确实存在,并且pop.txt文件确实存在其中吗?错误代码 3 是ERROR_PATH_NOT_FOUND,这通常意味着找不到文件夹(而ERROR_FILE_NOT_FOUND是丢失文件)。您的C:\Users文件夹实际上是否命名为Utenti?您是否尝试过使用Users而不是Utenti?获取用户Desktop文件夹正确路径的最佳方法是通过SHGetFolderPath(CSIDL_DESKTOPDIRECTORY)或SHGetKnownFolderPath(FOLDERID_Desktop),不要对其进行硬编码。