2014-12-10 2 views
0

C++에 FTP 클라이언트를 작성하여 FTP 서버에 파일을 자동 전송했습니다. 그러나 나는 FtpPutFile() 함수를 사용하려고 할 때 오류가 있습니다. 매번 사용할 때마다 GetLastError()no errorerror 2perror()에서옵니다. 내 명령 프롬프트에서 수동으로 할 수 있기 때문에 방화벽 때문이 아니라는 것을 알고 있습니다. 또한이 코드 부분에서 오류를 확인 했으므로 ftp 서버에 연결할 수 없기 때문이 아닙니다.FtpPutFile이 파일을 보내지 않음

나는 또한 Visual Studio 2010 환경에서이 개발, 그리고 난하지 그래서 나는 string.c_str()을 사용할 수 있습니다 설정 내 Character Set로 설정했습니다.

그래서 잘못 될 수있는 유일한 방법은 함수 자체를 호출하는 것입니다. 다음 부분은 FTP를 통해 파일을 보낼 suposed되는 함수를 의미하는 내 코드입니다 :

void fileTransfer(const std::string& filename) 
{ 
    LPCTSTR pstrServer = TEXT("ip.address"); 
    LPCTSTR pstrUserName = TEXT("user"); 
    LPCTSTR pstrPassword = TEXT("pass"); 
    LPCTSTR lpszLocalFile = (LPCTSTR)filename.c_str(); 
    LPCTSTR lpszNewRemoteFile = (LPCTSTR)filename.c_str(); 

    HINTERNET hSession = InternetOpen(0, INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0); 
    HINTERNET hService = InternetConnect(hSession, pstrServer, INTERNET_DEFAULT_FTP_PORT, pstrUserName, pstrPassword, INTERNET_SERVICE_FTP, 0, 0); 

    if(FtpPutFile(hService, filename.c_str(), filename.c_str(), FTP_TRANSFER_TYPE_ASCII, 0)) 
    { 
     printf("File copied\n"); 
    } 
    else 
    { 
     printf("File not copied\n"); 
     std::cerr << "Error: " << GetLastError() << std::endl; 
     perror("Error transfering file"); 
     putchar('\n'); 
    } 
    InternetCloseHandle(hService); 
    InternetCloseHandle(hSession); 
} 

사람이 여기 잘못 될 일을 알고 있나요? 이 코드는 특정 구조체 이름을 가진 특정 유형의 파일 .txt이있는 경우에만 실행되기 때문에. 그러나 FtpPutFile()에는 발견되지 않습니다. filename.c_str()을 인쇄해도 적절한 파일 이름을 얻습니다.

답변

1

GetLastError 2는 "파일을 찾을 수 없음"을 의미합니다.

FtpPutFile 문에서 소스 및 대상 매개 변수의 내용을 확인합니다.

+0

문제가 있습니다. 질문에 추가하는 것을 잊어 버렸습니다. 지금 할 것입니다. 이 코드는 특정 유형 (.txt)의 파일과 특정 이름 구조 (일년 중 logDDD - DDD 일)가있는 경우에만 실행됩니다. – Comum

+0

내 기능을 입력 한 후 문자가 누락되었습니다. 그래서 그것이 문제였습니다. 그것을 알아 내기 위해 모든 것을 인쇄해야했습니다. – Comum