如何防止生成的文件覆盖源文件 就像windows系统一样,复制粘贴,如果存在相同的文件名会自动判断并自动在结尾加上一个数字用于区别,这该如何实现好呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我写了一个函数,楼主可以参考一下,下面的代码用来保存以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));} 判断文件是否存在:BOOL FileExist(LPCWSTR path){ if(!path) return FALSE; return (GetFileAttributesW(path) != INVALID_FILE_ATTRIBUTES || GetLastError() != ERROR_FILE_NOT_FOUND) ? TRUE : FALSE;} 得到文件名char *p;p = strrchr(cfile,'.');if( p ) *p=0;CString fileName=_T("");fileName.Format("%s",cfile);fileName.AppendChar('*'); MFC简单编程问题 CreateProcess问题,请看一下 求xml文件读写类 fopen 问题?? 升到一星,散分庆祝! 在COM中,怎样在线程中触发连接点事件? 如何获取当前应用程序运行的完整路径名? 用Scrrun.dll(Scripting)枚举文件的问题 怎么改变一个CStatic的背景色? 如何用OCI把ORACLE的多条记录放入一个字符数组中? 文件大小消失 Spin和编辑框一起使用的问题!!!
{
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));
}
BOOL FileExist(LPCWSTR path)
{
if(!path)
return FALSE; return (GetFileAttributesW(path) != INVALID_FILE_ATTRIBUTES ||
GetLastError() != ERROR_FILE_NOT_FOUND) ? TRUE : FALSE;
}
char *p;
p = strrchr(cfile,'.');
if( p ) *p=0;
CString fileName=_T("");
fileName.Format("%s",cfile);
fileName.AppendChar('*');