【问题标题】:C++ WinINET FtpPutFile Error Code 3C++ WinINET FtpPutFile 错误代码 3
【发布时间】: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),不要对其进行硬编码。

标签: c++ windows path wininet


【解决方案1】:

GetLastError 返回 3 表示未找到路径:https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx

尝试从程序工作目录传递文件。

【讨论】:

  • "尝试从程序工作目录传递文件" - 像 OP 的代码那样提供绝对文件路径时,这不是必需的。
猜你喜欢
  • 2011-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-25
  • 2015-07-06
  • 1970-01-01
  • 2023-03-31
相关资源
最近更新 更多