Wininet & C++:使用 FTP 写入和附加,而不是覆盖,文件
Posted
技术标签:
【中文标题】Wininet & C++:使用 FTP 写入和附加,而不是覆盖,文件【英文标题】:Wininet & C++: Use FTP to write and append, not overwrite, a file 【发布时间】:2014-07-20 16:11:35 【问题描述】:我需要我的应用通过 FTP 连接到我的服务器并使用 wininet 库写入特定文件。
截至目前,一切正常,程序写入该文件。但是,每当我向文件添加新值时,它都会被覆盖。我想将新数据写入同一文件末尾的新行。
这是我的代码:
string user = "apaaaasdasdasdsdsa";
HINTERNET hInternet;
HINTERNET hFtpSession;
hInternet = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
hFtpSession = InternetConnect(hInternet, "ftp.blabla", port, "blablabla", "password", INTERNET_SERVICE_FTP, 0, 0);
// Testing
HINTERNET hFile = FtpOpenFile(hFtpSession, "test.html", GENERIC_WRITE , FTP_TRANSFER_TYPE_ASCII, 0);
DWORD wb = 0;
char tab2[1024];
strcpy_s(tab2, user.c_str());
InternetWriteFile(hFile, tab2, strlen(tab2), &wb);
//------------------------------
InternetCloseHandle(hFtpSession);
InternetCloseHandle(hInternet);
【问题讨论】:
【参考方案1】:FTP 协议无法读懂您的想法。它不知道您打算追加到文件中。 WinInet API doesn't directly support appending to files。相反,您需要使用FtpCommand
直接发送APPEND
FTP 命令。有关示例,请参阅链接的支持文章。
【讨论】:
感谢您的回答。就像我想的那样。我必须下载它,用新数据(+旧数据)在客户端中更改它,然后重新上传。 正如我所说,如果你想追加,那么使用APPEND
命令就可以了。如果您不打算更改文件的现有部分,则无需下载。我的 FTP 已生锈,因此您可能希望了解是否可以对文件中间进行更改。以上是关于Wininet & C++:使用 FTP 写入和附加,而不是覆盖,文件的主要内容,如果未能解决你的问题,请参考以下文章
FTP 异步操作上的 ERROR_IO_PENDING [Wininet C++]
使用 WinInet VB.net 测试与 FTP 服务器的连接