FTPWanderer代码中的3个Bug

本文详细介绍了如何解决FTP客户端在文件上传、目录重命名及特殊字符处理时出现的问题。通过修改上传逻辑、调整目录操作流程及优化日志记录方式,成功解决了程序在特定情况下的崩溃现象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、上传文件时,如果文件大小是1024的整数倍,则提示出错

2、新建一个目录然后重命名,这时会新建一个目录而没有重命名

3、上传下载包含中文名称和%字符的文件名时程序会挂掉

 

1、将void CUploadThread::UploadFile(CString &source, CString &dest)中的

while (nRead == BUF_SIZE && (WaitForSingleObject(m_hEventKill, 0) == WAIT_TIMEOUT))

改为while (nRead !=0&& (WaitForSingleObject(m_hEventKill, 0) == WAIT_TIMEOUT))即可,Bug产生原因

 

nRead = m_File.Read(buffer, BUF_SIZE);

// write buffer to remote data file

pInternetFile->Write(buffer, nRead);  //如果上传文件为1024的整数倍,则最后一定读取的本地文件大小为0字节,CInternetFile::Write的第二个参数为0则产生异常,但测试发现CFile::Write 0个字节没有问题。

 

2、将void CMainFrame::OnEndlabeledit(NMHDR* pNMHDR, LRESULT* pResult) 增加m_bNewFolderMode = FALSE;
   LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
    if ((pDispInfo->item.pszText) && (m_pFtpConnection))
    {
        if (m_bNewFolderMode)
        {
            GetTraceView()->AddTraceLine(2, "[%d] Creating New Folder /"%s/"", AfxGetThread()->m_nThreadID, pDispInfo->item.pszText);
            if (m_pFtpConnection->CreateDirectory(pDispInfo->item.pszText))
            {
                GetFtpListView()->SetFileName(pDispInfo->item.iItem, pDispInfo->item.pszText);
                m_hCurrentTreeItem = GetFtpTreeView()->GetTreeCtrl().GetSelectedItem();
                int nIcon = GetIconIndex("Desktop", TRUE);
                HTREEITEM hItem = GetFtpTreeView()->GetTreeCtrl().InsertItem(pDispInfo->item.pszText, nIcon, nIcon, m_hCurrentTreeItem);
                m_bNewFolderMode = FALSE;/////添加这句就OK了
3、解决方法是修改void AddTraceLine(int nType, LPCTSTR pstrFormat, ...)函数部分代码,其中的CString::Formate出错
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值