免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3495 | 回复: 9
打印 上一主题 下一主题

[C++] 句柄无效 [复制链接]

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-08-12 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-08-18 12:52 |只看该作者 |倒序浏览
本帖最后由 framily 于 2015-08-18 12:53 编辑

void CMFCApplication1Dlg::FileUpload(LPCTSTR serverName, unsigned short port, LPCTSTR username, LPCTSTR password, LPCTSTR localFileName, LPCTSTR serverFileName)
{
    CInternetSession InetSession;
    CFtpConnection *ftp = nullptr;

    try{
        ftp = InetSession.GetFtpConnection(serverName, username, password, port, 1);
    }
    catch (CInternetException *pEx){
        MessageBox(_T("不能连接服务器!请确认服务已开启"), _T("错误"));
        InetSession.Close();
        if (ftp != NULL)
        {
            delete ftp;
            ftp = NULL;
        }
        pEx->Delete();
        return;
    }

    bool b = FtpPutFile(ftp, localFileName, serverFileName, FTP_TRANSFER_TYPE_BINARY, 0);
    int n = GetLastError();
    cout << b << endl;
}

n = 6,,通过错误查找工具发现错误提示是句柄无效,求教,怎么回事,怎么改??

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
2 [报告]
发表于 2015-08-18 13:23 |只看该作者
ftp->PutFile(......

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-08-12 06:20:00
3 [报告]
发表于 2015-08-18 13:33 |只看该作者
回复 2# hellioncu

嗯,,成功了,,这是为什么呢。。
   

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-08-12 06:20:00
4 [报告]
发表于 2015-08-18 13:34 |只看该作者
回复 3# framily


    之前用InnetOpen建立句柄时,是可以用FtpPutFile的。。。代码如下,,之前的。。。
  1. //HINTERNET hInternet;
  2. //HINTERNET hFtpSession;
  3. //hInternet = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
  4. //if (hInternet == NULL)
  5. //{
  6. //    return;
  7. //}
  8. //else
  9. //{
  10. //    hFtpSession = InternetConnect(hInternet, serverName, INTERNET_DEFAULT_FTP_PORT, _T("ghost"), _T("ghost"), INTERNET_SERVICE_FTP, 0, 0);
  11. //    if (hFtpSession == NULL)
  12. //    {
  13. //        return;
  14. //    }
  15. //    else
  16. //    {
  17. //        if (!FtpPutFile(hFtpSession, localFileName, serverFileName, FTP_TRANSFER_TYPE_BINARY, 0))
  18. //        {
  19. //            return;
  20. //        }
  21. //    }
  22. //}
复制代码

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
5 [报告]
发表于 2015-08-18 13:36 |只看该作者
framily 发表于 2015-08-18 13:34
回复 3# framily


句柄不是MFC对象指针

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-08-12 06:20:00
6 [报告]
发表于 2015-08-18 13:38 |只看该作者
回复 5# hellioncu


    虽然不甚明了,,,先这样用吧,,谢谢大哥。。。

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-08-12 06:20:00
7 [报告]
发表于 2015-08-18 14:57 |只看该作者
回复 2# hellioncu


    大哥,我想做个断点续传,但是么思路,不会做,,大哥,给留一段代码,,让小弟学习下吧,,,

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
8 [报告]
发表于 2015-08-18 15:04 |只看该作者
framily 发表于 2015-08-18 14:57
回复 2# hellioncu


我没有现成的代码。你先去看FTP协议,就知道怎么断点续传了

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-08-12 06:20:00
9 [报告]
发表于 2015-08-18 16:32 |只看该作者
回复 8# hellioncu


    郁闷啊,FtpPutFile文件传输不能全部传输,,,700多兆的文件,,只传了200多兆,有时候10几兆,,好的情况下也差好几十兆,,求破??

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-08-12 06:20:00
10 [报告]
发表于 2015-08-18 17:46 |只看该作者
本帖最后由 framily 于 2015-08-18 17:55 编辑
  1. void CMFCApplication1Dlg::FileUpload(LPCTSTR serverName, unsigned short port, LPCTSTR username, LPCTSTR password, LPCTSTR localFileName, LPCTSTR serverFileName)
  2. {
  3.     CInternetSession InetSession;
  4.     CFtpConnection *ftp = nullptr;
  5.     int retryTime = 0;

  6.         try{
  7.             ftp = InetSession.GetFtpConnection(serverName, username, password, port, 1);  
  8.         }
  9.         catch (CInternetException *pEx) {
  10.             InetSession.Close();

  11.             if (ftp != NULL)
  12.             {
  13.                 delete ftp;
  14.                 ftp = NULL;
  15.             }

  16.             pEx->Delete();
  17.             return;
  18.         }

  19.         while (!ftp->PutFile(localFileName, serverFileName) && retryTime < 5)
  20.         {
  21.             if (12002 == GetLastError())
  22.             {
  23.                 retryTime++;
  24.                 continue;
  25.             }
  26.         }
  27.         // bool b = FtpPutFile(ftp, localFileName, serverFileName, FTP_TRANSFER_TYPE_BINARY, 0);
  28.         ftp->Close();
  29.         InetSession.Close();
  30.         if (ftp != NULL)
  31.         {
  32.             delete ftp;
  33.             ftp = NULL;
  34.         }
  35. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP