通过FtpCommand C ++追加文件

时间:2016-08-27 04:21:29

标签: c++ ftp wininet

我试图将信息附加到位于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命令似乎也是"工作&#34 ;;虽然它实际上没有传输我的本地文件,但它在列为C:\Users\Brandon\Desktop\test.txt mainfile.txt的服务器上创建了空文档。现在我绝对相信我的错误来自使用APPE命令。

1 个答案:

答案 0 :(得分:0)

因此,APPE指定远程文件,与 local-file 的传输无关。使用APPE命令后,FtpCommand会将响应写入变量,然后您需要使用InternetWriteFile复制本地文件的内容结束。我现在唯一的问题是它给我的格式,但它现在更加可行。

代码:

    HINTERNET res;
    DWORD d; //make sure all bits written
    CHAR * texttowrite = "test write";

    FtpCommand(hFtpSession, TRUE, FTP_TRANSFER_TYPE_BINARY, 
               L"APPE mainfile.txt", 0, &res); //specifices where to write to
    InternetWriteFile(res, texttowrite, 
                      strlen(texttowrite), &d); //writes text to ftp response