KeyFC欢迎致辞,点击播放
资源、介绍、历史、Q群等新人必读
KeyFC 社区总索引
如果你找到这个笔记本,请把它邮寄给我们的回忆
KeyFC 漂流瓶传递活动 Since 2011
 

文件批量移动/重命名工具(6月15日6:30,修正了一个隐含BUG)

[ 4970 查看 / 5 回复 ]

这两天虽然上不来,但是也没闲着。这就是这两天的成果。

 

软件成品
源代码


这次是用MFC写的,不知道有没有什么兼容性问题。

-----------------------------------------------------------

谢谢fish的提醒和代码,已经添加到程序里去了。



月15日6:30

修正了一个隐含BUG,也就是无法识别磁盘空间不足和目标目录被删除的错误情况。
分享 转发
KCDDP KR/KAG区值班室常驻义务值班员

现在在KCDDP的论坛也已经开始潜水了Orz
但是QQ群还是长期在线的
TOP

回复:文件批量移动/重命名工具(6月15日6:30,修正了一个隐含BUG)

不错的一个软件...
解决按ESC或ENTER就会退出的问题:
按Ctrl+W打开下面这个:
上传文件4644
添加一个PreTranslateMessage()函数(双击就可以)
按下面的来写
BOOL CFileManageAndMoveDlg::PreTranslateMessage(MSG* pMsg)
{
    if (WM_KEYDOWN == pMsg->message)
    {
      if(VK_RETURN == pMsg->wParam)
            return TRUE;
       if(VK_ESCAPE == pMsg->wParam)
           return TRUE;
    }   
    return CDialog::PreTranslateMessage(pMsg);
}
TOP

回复:文件批量移动/重命名工具(6月15日6:30,修正了一个隐含BUG)

谢谢两位。
程序不错,我正想要这么个程序。
楼上教得不错。mfc默认按回车键就退出。我正想知道怎么把它改掉呢。
ツバサを結ぶ
リボンを解いて
ユメを飛ばしたいの
TOP

回复:文件批量移动/重命名工具(6月15日6:30,修正了一个隐含BUG)

kfc真是藏龙卧虎啊
拜一下
http://free5.ys168.com/?kzhou
kanon和air汉化补丁+日文语音版补丁+剧本等
TOP

回复:文件批量移动/重命名工具(6月15日6:30,修正了一个隐含BUG)

6月15日6:30

看来由于我经验不足,又给大家添麻烦了。之前的这个程序有一个隐含BUG。
昨天晚上想到了一个问题,就是执行错误中,只考虑到了文件名重复,没有判断其他错误。这样会出现隐含的问题。比如说,磁盘空间不够,或者因为设定了存储路径后由外部删掉该文件夹(应该没人这么做吧)而导致找不到目标文件夹的错误,都会当成文件名重复处理,使得处理过程终止(但是不会丢失数据,即使选了“替换”)。
这次修正了这个BUG,还有,为了保险,把文件移动改成了“写穿透”方式。
KCDDP KR/KAG区值班室常驻义务值班员

现在在KCDDP的论坛也已经开始潜水了Orz
但是QQ群还是长期在线的
TOP

回复:文件批量移动/重命名工具(6月15日6:30,修正了一个隐含BUG)

嘿嘿,改了一下,在OnButtondo()里面加入了:

/*
BOOL GetDiskFreeSpace(
  LPCTSTR lpRootPathName,          // root path
  LPDWORD lpSectorsPerCluster,    // sectors per cluster
  LPDWORD lpBytesPerSector,        // bytes per sector
  LPDWORD lpNumberOfFreeClusters,  // free clusters
  LPDWORD lpTotalNumberOfClusters  // total clusters
);
*/
    if(MoveToAnotherDriver)
    {
        GetDlgItemText(IDC_EDITSAVEPATH,SavePath1); //CString SavePath1,Temp2
        Temp2 = SavePath1.Left(3);
        GetDiskFreeSpace(Temp2,&sePcl,&byPse,&freeCl,&totCl);
        FreeSpace = byPse*freeCl*sePcl;

        for(i = 0; i < n; i++)
        {
            m_listD.GetText(i,Temp2);
            HANDLE hFile=CreateFile(Temp2,GENERIC_READ,FILE_SHARE_READ,
                                    NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

            if(hFile != NULL)
            {
                Total_FileSize += GetFileSize(hFile,NULL);
            }
            CloseHandle(hFile);
        }
        if(FreeSpace < Total_FileSize)
        {
            MessageBox("目标磁盘空间不足","错误",MB_OK|MB_ICONSTOP);
            return;
        }

    }
//下面是原来的代码
    //执行移动操作
    if(ReName)
        index = ns+n-1;


定义的部分:
DWORD Total_FileSize=0,FreeSpace,sePcl,byPse,freeCl,totCl;
这样加了以后,移动之前就会检测一下目标盘是否有足够空间,不够的话就会拒绝移动的了 XD
TOP