2011-09-10 259 views
-7

我正在上傳一個文件上傳到FTP服務器的小小應用程序。我已經檢查了我的代碼,但我很難找到問題。下面是代碼,上傳到FTP服務器

#include "stdafx.h" 

using namespace System; 

#include "iostream" 
#include <conio.h> 

using namespace System; 

void UploadFiles(String ^_FileName, String ^_UploadPath, String ^_FTPUser, String ^_FTPPass); 

int main() 
{ 
    // Upload file using FTP 
    UploadFiles("c:\\test.html", "ftp://playbabe.tk/public_html/test.html", "xxxxxx", "xxxxxx"); 
    return 0; 
} 

void UploadFiles(System::String ^_FileName, System::String ^_UploadPath, System::String ^_FTPUser, System::String ^_FTPPass) 
{ 
    System::IO::FileInfo ^_FileInfo = gcnew System::IO::FileInfo(_FileName); 

    // Create FtpWebRequest object from the Uri provided 
    System::Net::FtpWebRequest ^_FtpWebRequest = safe_cast<System::Net::FtpWebRequest^>(System::Net::FtpWebRequest::Create(gcnew Uri(_UploadPath))); 

    // Provide the WebPermission Credintials 
    _FtpWebRequest->Credentials = gcnew System::Net::NetworkCredential(_FTPUser, _FTPPass); 

    // By default KeepAlive is true, where the control connection is not closed 
    // after a command is executed. 
    _FtpWebRequest->KeepAlive = false; 

    // set timeout for 20 seconds 
    _FtpWebRequest->Timeout = 20000; 

    // Specify the command to be executed. 

    _FtpWebRequest->Method =System::Net::WebRequestMethods::Ftp.UploadFile; 

    // Specify the data transfer type. 
    _FtpWebRequest->UseBinary = true; 

    // Notify the server about the size of the uploaded file 
    _FtpWebRequest->ContentLength = _FileInfo->Length; 

    // The buffer size is set to 2kb 
    int buffLength = 2048; 
    array<System::Byte> ^buff = gcnew array<System::Byte>(buffLength); 

    // Opens a file stream (System.IO.FileStream) to read the file to be uploaded 
    System::IO::FileStream ^_FileStream = _FileInfo->OpenRead(); 

    try 
    { 
     // Stream to which the file to be upload is written 
     System::IO::Stream ^_Stream = _FtpWebRequest->GetRequestStream(); 

     // Read from the file stream 2kb at a time 
     int contentLen = _FileStream->Read(buff, 0, buffLength); 

     // Till Stream content ends 
     while (contentLen != 0) 
     { 
      // Write Content from the file stream to the FTP Upload Stream 
      _Stream->Write(buff, 0, contentLen); 
      contentLen = _FileStream->Read(buff, 0, buffLength); 
     } 

     // Close the file stream and the Request Stream 
     _Stream->Close(); 
     delete _Stream; 
     _FileStream->Close(); 
     delete _FileStream; 
    } 
    catch (Exception ^ex) 
    { 
     //MessageBox::Show(ex->Message, "Upload Error", MessageBoxButtons::OK, MessageBoxIcon::Error); 
     std::cout<<"error"; 
    } 

    getch(); 
} 

它給出兩個錯誤在Visual C++ 2010 Express中,

錯誤1個錯誤C2275:'System::Net::WebRequestMethods::Ftp':非法使用這種類型作爲表達式的C:\用戶\我\ document \ visual studio 2010 \ Projects \ test1 \ test1 \ test1.cpp 70

Error 2 error C2228:left of '.UploadFile' must have class/struct/union C:\ Users \ Me \ documents \ visual studio 2010 \ Projects \ test1 \ test1 \ test1.cpp 70

我不知道這裏發生了什麼問題。

+0

其中,您的縮進。 –

+1

這不是C++代碼。 –

+0

對不起,並感謝編輯它。這不是純粹的C++,但在我的大學,它通常是C++所以...... :(任何幫助嗎?) –

回答

0

我不知道C++/CLI,但下面的語句肯定是錯誤的:

_FtpWebRequest->Method = System::Net::WebRequestMethods::Ftp.UploadFile; 

System::Net::WebRequestMethods::Ftp是一種類型,並在錯誤信息表明(你可以給我們的行號!)你試圖用它作爲表達。

你想獲得一個指向靜態成員函數的指針嗎?

您是否因此表達了以下內容?

_FtpWebRequest->Method = System::Net::WebRequestMethods::Ftp::UploadFile; 
+0

工作。非常感謝。問題解決了。非常感謝。 –

+0

我如何將它標記爲已解決? –

+0

@Mohammad:點擊打勾。 –