就像windows系统一样,复制粘贴,如果存在相同的文件名会自动判断并自动在结尾加上一个数字用于区别,这该如何实现好呢?

解决方案 »

  1.   

    我写了一个函数,楼主可以参考一下,下面的代码用来保存以a为文件名的图像文件并会自动编号:void CTAG9Dlg::SaveBitmapFile()
    {
    CImage m;
    m.CreateEx(20, 20, 24, BI_RGB);
    CRect rect(0,0,20,20);
    HDC dc=m.GetDC();
    ::SetBkColor(dc, ::GetSysColor(COLOR_WINDOW));
    ::ExtTextOut(dc, 0, 0, ETO_OPAQUE, rect, NULL, 0, NULL);
    ::Ellipse(dc, 0,0, 4, 4);
    m.ReleaseDC(); CString fileName=_T("D:\\a*"); 
    int num=-1;
    WIN32_FIND_DATA FindFileData;
    HANDLE hFind(NULL);
    hFind = FindFirstFile(fileName, &FindFileData);
    if (hFind != INVALID_HANDLE_VALUE) 
    {
    num=getFileNUM(fileName);
    while (FindNextFile(hFind, &FindFileData) != 0) 
    {
    int _num=this->getFileNUM(FindFileData.cFileName);
    if (_num>num)
    {
    num=_num;
    }
    }
    FindClose(hFind);
    }
    if (num>-1)
    {
    fileName.Format(_T("D:\\a%d.bmp"), num+1);
    }
    else
    {
    fileName=_T("D:\\a.bmp");
    }
    m.Save(fileName); 
    m.Destroy();
    }
    int CTAG9Dlg::getFileNUM(CString fileName)
    {
    int index=fileName.Find(_T('.'));
    while(index>0)
    {
    TCHAR digit=fileName[index-1];
    if (digit==_T('0')||
    digit==_T('0')||
    digit==_T('1')||
    digit==_T('2')||
    digit==_T('3')||
    digit==_T('4')||
    digit==_T('5')||
    digit==_T('6')||
    digit==_T('7')||
    digit==_T('8')||
    digit==_T('9'))
    {
    index--;
    continue;
    }
    break;
    }
    return _tstoi(fileName.Mid(index));
    }
      

  2.   

    判断文件是否存在:
    BOOL FileExist(LPCWSTR path)
    {
    if(!path)
    return FALSE; return (GetFileAttributesW(path) != INVALID_FILE_ATTRIBUTES || 
    GetLastError() != ERROR_FILE_NOT_FOUND) ? TRUE : FALSE;
    }
      

  3.   

    得到文件名
    char *p;
    p = strrchr(cfile,'.');
    if( p ) *p=0;
    CString fileName=_T("");
    fileName.Format("%s",cfile);
    fileName.AppendChar('*');