【问题标题】:Cannot upload a file to a ftp server using C++无法使用 C++ 将文件上传到 ftp 服务器
【发布时间】:2011-03-26 22:03:37
【问题描述】:

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

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.

【问题讨论】:

  • 什么是错误检查(即检查返回并调用 GetLastError())?
  • 对不起,我犯了一个错误,是的,它返回一个错误(32):该进程无法访问该文件,因为它正在被另一个进程使用。
  • 我假设您指的是 FtpPutFile 调用?奇怪的。由于没有尝试在服务器日志中传输文件,我猜它失败了。
  • @vBx:啊,听起来好像有人打开了它的句柄并阻止了读取共享。
  • 奇怪,我不明白为什么我得到这个,嗯

标签: c++ ftp filezilla


【解决方案1】:

GetLastError() 为 FtpPutFile 返回 ERROR_SHARING_VIOLATION (32),这可能意味着“c:\stories.txt”的打开句柄阻止了读取共享。如果您在程序中打开此文件,则需要在 CreateFile 调用中允许读取共享或关闭所有阻止共享的打开句柄,以便 FtpPutFile 可以打开该文件。

【讨论】:

  • 注意:如果您之前正在写入相关文件,并且您选择允许读取共享并保持句柄打开,您将需要调用 FlushFileBuffers 以确保将写入刷新到文件中。当然,如果你在文件上传到服务器的同时在另一个线程上写入文件,服务器上的内容可能不是你所期望的。
猜你喜欢
  • 1970-01-01
  • 2011-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-14
  • 2016-01-07
  • 1970-01-01
相关资源
最近更新 更多