【发布时间】:2016-08-27 04:21:29
【问题描述】:
我正在尝试将信息附加到位于 ftp 服务器上的mainfile.txt。查看文档后,似乎wininet.h 没有任何附加方法,FtpCommand() 需要通过命令来促进附加;我遇到的问题是,我认为我在命令上搞砸了,因为几乎没有关于它的文档。如果有任何经验的人可以对此有所了解或指出我正确的方向,将不胜感激。
代码:
HINTERNET hInternet;
HINTERNET hFtpSession;
hInternet = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
hFtpSession = InternetConnect(hInternet, L"host", INTERNET_DEFAULT_FTP_PORT, L"username",
L"password", INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
if (FtpCommand(hFtpSession, FALSE, FTP_TRANSFER_TYPE_ASCII,
L"APPE C:\\Users\\Brandon\\Desktop\\test.txt mainfile.txt", 0, 0))
MessageBox(NULL, L"Sucess", L"Window", NULL);
else {
PrintServerResponse();
MessageBox(NULL, L"Failed", L"Window", NULL);
}
InternetCloseHandle(hFtpSession);
InternetCloseHandle(hInternet);
当我发送命令APPE C:\\Users\\Brandon\\Desktop\\test.txt mainfile.txt 时,我的回复是......
Response error code: 0
Response message:
当我发送命令APPEND C:\\Users\\Brandon\\Desktop\\test.txt mainfile.txt 时,我的回复是......
Response error code: 0
Response message: 500 APPEND not understood
我相信error code: 0 指的是无效的语法,但我不确定。第二个命令有助于显示我已正确连接到服务器。
最初我的代码使用FtpPutFile(hFtpSession, L"C:\\Users\\Brandon\\Desktop\\test.txt", L"mainfile.txt", FTP_TRANSFER_TYPE_BINARY, 0) 将文件放置到服务器,但没有使用FtpCommand()
编辑: 我发送的APPE C:\\Users\\Brandon\\Desktop\\test.txt mainfile.txt 命令似乎也在“工作”;虽然它实际上并没有传输我的本地文件,但它在列为C:\Users\Brandon\Desktop\test.txt mainfile.txt 的服务器上创建了空文档。现在我绝对相信我的错误来自于使用APPE 命令。
【问题讨论】:
-
您的
APPE命令格式错误。阅读 FTP 规范,RFC 959。 -
我对问题的回答是否仍然格式错误?我让它正确附加,但不确定是否有什么可以做得更好。
-
APPE命令的格式现在很好,但是在调用InternetWriteFile()之前您没有检查错误响应。此外,InternetWriteFile()可以写入比请求更少的字节,因此它应该在一个循环中,注意写入的返回值,以了解还需要写入哪些数据以及何时停止循环。另外,传输完成后不要忘记关闭res句柄。 -
是的,我昨晚试图在没有错误检查的情况下粗略地构建它。 APPE 命令的有效性是否会决定是否存在服务器超时?这是我的应用程序中目前唯一的严重错误。