2016-08-27 125 views
0

ftpサーバーにあるmainfile.txtに情報を追加しようとしています。ドキュメントを調べた後、wininet.hには、コマンドを使って追加を実行する必要があることを追加する方法がありません。私が抱えている問題は、私はそれについてのドキュメントがほとんどないためにコマンドについていくと信じているということです。これを経験した経験があれば誰でもそれを照らすことができ、正しい方向に向けることができれば大いに感謝します。FtpCommandでファイルに追加するC++

コード:

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は無効な構文を指していますが、わかりません。 2番目のコマンドは、サーバーに正しく接続されていることを示すのに役立ちます。

もともと私のコードは、サーバーにファイルを配置するFtpPutFile(hFtpSession, L"C:\\Users\\Brandon\\Desktop\\test.txt", L"mainfile.txt", FTP_TRANSFER_TYPE_BINARY, 0)を使用していますが、FtpCommand()

EDITの使用を負いません:また私が送るよAPPE C:\\Users\\Brandon\\Desktop\\test.txt mainfile.txtコマンドは「作業」していることと思われます;実際にローカルファイルを転送していない間に、サーバ上に空のドキュメントを作成しています(C:\Users\Brandon\Desktop\test.txt mainfile.txt)。今私は間違いなく私のエラーはAPPEコマンドの使用から来ていると確信しています。

+1

あなた 'APPE'コマンドが不正な形式です。 FTP仕様、[RFC 959](https://tools.ietf.org/html/rfc959)を読んでください。 –

+0

問題への私の答えには依然として不正な形式ですか?私はそれを正しく付加するようにしましたが、私がより良くできることがあるかどうかはわかりません。 – Feek

+0

'APPE'コマンドのフォーマットは正常ですが、' InternetWriteFile() 'を呼び出す前にエラーに対する応答をチェックしていません。また、 'InternetWriteFile()'は要求されたバイト数よりも少ないバイト数しか書くことができないため、書き込みの戻り値に注意を払ってループの中にいなければなりません。また、転送終了後に 'res'ハンドルを閉じることを忘れないでください。 –

答えて

0

ので、APPEリモートファイルを指定し、ローカルファイルの転送とは何の関係もありません。 APPEコマンドが使用されると、FtpCommandは変数への応答を書き込んで、を使用してローカルファイルの内容をコピーする必要があります。今私の唯一の問題は、それが私に与えているフォーマットですが、今はもっとはるかに実行可能です。

コード:

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 
関連する問題