2011-03-26 157 views
0

我有这个简单的代码上传文件到服务器,但它似乎不工作,不上传任何文件(FtpPutFile返回0)。我正在使用FileZilla服务器,这是我的代码和FileZilla所说的:无法上传文件到FTP服务器使用C++

void upload() 
{ 
    hInternet = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); 
    hFtpSession = InternetConnect(hInternet,"127.0.0.1",INTERNET_DEFAULT_FTP_PORT,"vbx","pass",INTERNET_SERVICE_FTP, 0,0); 
    FtpPutFile(hFtpSession, "c:\\stories.txt", "e:\\text.txt", FTP_TRANSFER_TYPE_BINARY, 0); 
    InternetCloseHandle(hFtpSession); 
    InternetCloseHandle(hInternet); 
} 

(000011)3/27/2011 0:01:53 AM - (not logged in) (127.0.0.1)> USER vbx 
(000011)3/27/2011 0:01:53 AM - (not logged in) (127.0.0.1)> 331 Password required for vbx 
(000011)3/27/2011 0:01:53 AM - (not logged in) (127.0.0.1)> PASS ******* 
(000011)3/27/2011 0:01:53 AM - vbx (127.0.0.1)> 230 Logged on 
(000011)3/27/2011 0:01:53 AM - vbx (127.0.0.1)> disconnected. 

谢谢。

编辑:GetLastError() returns: The process cannot access the file because it is being used by another process.

+0

什么是错误检查让你(即检查返回并调用GetLastError())? – 2011-03-26 22:08:41

+0

它返回ERROR_SUCCES – Kobe 2011-03-26 22:14:34

+0

对不起,我犯了一个错误,是的,它返回一个错误(32):进程无法访问该文件,因为它正在被另一个进程使用。 – Kobe 2011-03-26 22:15:54

回答

1

随着GetLastError函数()返回用于FtpPutFile ERROR_SHARING_VIOLATION(32),它可能意味着有一个打开的句柄 “C:\ stories.txt的” 防止读共享。如果在程序中打开了此文件,则需要在CreateFile调用中允许读共享,或者关闭所有打开的防止共享的句柄,以便FtpPutFile可以打开该文件。

+0

注意:如果您之前正在写入有问题的文件,并且您选择允许读共享并保持该句柄处于打开状态,则您需要调用FlushFileBuffers以确保将写入操作刷新到文件。当然,如果您在文件上传到服务器时在另一个线程上写入文件,则服务器上的内容可能不符合您的期望。 – 2011-03-26 22:50:19