KeyFansClub

首页 » - 特色讨论区 - » 键社茶餐厅 » 文件批量移动/重命名工具(6月15日6:30,修正了一个隐含BUG)
希德船长 - 2005/6/14 20:02:00
这两天虽然上不来,但是也没闲着。这就是这两天的成果。

[IMG=upload/KFCFile4641_88701cf3179262fe.jpg]  [/IMG]

[URL=upload/KFCFile4650_c05df0d5a2c8cc93.zip]软件成品[/URL]
[URL=upload/KFCFile4651_b0a0aa5696233ee8.zip]源代码[/URL]


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

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

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



月15日6:30

修正了一个隐含BUG,也就是无法识别磁盘空间不足和目标目录被删除的错误情况。
fish - 2005/6/14 20:44:00
不错的一个软件...
解决按ESC或ENTER就会退出的问题:
按Ctrl+W打开下面这个:
[IMG=upload/KFCFile4644_Snap1.gif]上传文件4644[/IMG]
添加一个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);
}
orlye - 2005/6/14 20:53:00
谢谢两位。
程序不错,我正想要这么个程序。
楼上教得不错。mfc默认按回车键就退出。我正想知道怎么把它改掉呢。
kzhou - 2005/6/15 2:39:00
kfc真是藏龙卧虎啊
拜一下
希德船长 - 2005/6/15 6:44:00
6月15日6:30

看来由于我经验不足,又给大家添麻烦了。之前的这个程序有一个隐含BUG。
昨天晚上想到了一个问题,就是执行错误中,只考虑到了文件名重复,没有判断其他错误。这样会出现隐含的问题。比如说,磁盘空间不够,或者因为设定了存储路径后由外部删掉该文件夹(应该没人这么做吧)而导致找不到目标文件夹的错误,都会当成文件名重复处理,使得处理过程终止(但是不会丢失数据,即使选了“替换”)。
这次修正了这个BUG,还有,为了保险,把文件移动改成了“写穿透”方式。
fish - 2005/6/15 14:01:00
嘿嘿,改了一下,在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
1
查看完整版本: 文件批量移动/重命名工具(6月15日6:30,修正了一个隐含BUG)