C++ 使用 WinINet 上传到 FTP 服务器

Posted

技术标签:

【中文标题】C++ 使用 WinINet 上传到 FTP 服务器【英文标题】:C++ Uploading to an FTP server with WinINet 【发布时间】:2014-02-24 12:49:42 【问题描述】:

我已经搜索了 2 个小时,但我似乎无法弄清楚如何简单地使用 FTP 服务器上传文件。

我更喜欢使用 WinINet,因为我是 C++ 和 Microsoft Visual Studio 的新手(我不是编程新手,只是 C++)

我真正需要的只是一个如何使用 FTP 服务器上传文件的工作示例。在过去的 2 个小时里,我一直在网上搜索,但我找不到任何东西。

我尝试了很多不同的库和东西,但似乎都没有用,而且很多已经过时了。

无论如何,如果您愿意分享有关使用 FTP 通过 C++ 上传文件的知识、链接或经验,我将不胜感激。

谢谢 -Alex Benoit

【问题讨论】:

查看msdn.microsoft.com/en-us/library/windows/desktop/… 获取大量示例代码(不难找到) 我去过那里。我已经浏览了大约 200 页不同的页面..我已经阅读了很多。我似乎做对了一切,但方法太多了,可能的错误也太多了。 如果您的意思是可能的运行时错误(而不是编程错误):是的,没有其他示例可以解决该问题。整个 Winapi 的大部分设计方式是每个命令大约有 >100(至少“很多”)不同的可能错误。关于编程错误:如果代码太混乱,在同一个站点上的图表显示了您需要的核心功能的名称、顺序等。剩下的就是阅读这个函数的文档,了解可能的参数、返回值等。 【参考方案1】:

想通了。这是我正在使用的代码

#include <wininet.h> 
#pragma comment(lib, "Wininet")
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, "server", INTERNET_DEFAULT_FTP_PORT, "user", "pass", INTERNET_SERVICE_FTP, 0, 0);
            if (hFtpSession == NULL)
            
                cout << "Error: " << GetLastError();
            
            else
            
                if (!FtpPutFile(hFtpSession, "C://file.txt", "/file.txt", FTP_TRANSFER_TYPE_BINARY, 0))
                
                    cout << "Error: " << GetLastError();
                
            
        
    

【讨论】:

这可能不适用于 Windows 7 或更低版本。 WinINet 有问题。我相信它实际上是通过昨晚更新为 Windows 8.1 修复的,但这只是对 Windows 8.1 的修复,不幸的是 Windows 7 也不是。 什么问题?我找到了你的答案并打算使用它!

以上是关于C++ 使用 WinINet 上传到 FTP 服务器的主要内容,如果未能解决你的问题,请参考以下文章

FTP 异步操作上的 ERROR_IO_PENDING [Wininet C++]

C++ WinInet InternetCloseHandle 崩溃

如何在 WinInet C++ 中获取 FTP 下载的进度

尝试使用 wininet 将文件上传到 FTP 时遇到问题 [Id 返回 1 退出状态]

Wininet & C++:使用 FTP 写入和附加,而不是覆盖,文件

将进度条添加到wininet http上传C++