想要把后缀名更换掉,比如从.txt到.datCString s;
char s1[100],s2[100],s3[100];
CFileDialog* fdlg=new CFileDialog(TRUE,"txt",NULL,NULL,"Text Files (*.txt)|*.txt||");
if((fdlg->DoModal())!=IDOK){
delete fdlg;
return;
}

s=fdlg->GetPathName();
delete fdlg;sprintf(s1, "%s", s);strncpy(s2,s1,strlen(s1)-4);
s2[strlen(s1)-4]='\0';strcat(s2,".dat");
s2[strlen(s3)]='\0';LoadData(s2);
...

解决方案 »

  1.   

    s.Replace(_T(".txt"), _T(".dat"));前提是你的路径中不能出现.txt字符串。
      

  2.   

    s2[strlen(s3)]='\0'; // s3是哪来的?把这行去掉就没问题了。
      

  3.   

    s=s.Left(s.GetLength()-strlen(".txt"));
    s+=".dat";
      

  4.   

    楼主的代码真是有点让人看不下去了
    另外文件对话框临时使用 没必要new吧,不小心忘了delete很容易内存泄露。
    临时使用尽量用局部变量啦!(注:如果用了新的SDK,并且定义了_WIN32_WINNT=0x0500以上,VC6的CFileDialog倒是会出错,解决方法就是用楼主的方法new/delete来解决)CString s; 
    CFileDialog dlg(TRUE,"txt",NULL,NULL,"Text Files (*.txt) ¦*.txt ¦ ¦"); 
    if((dlg.DoModal())!=IDOK)
        return;s = fdlg->GetPathName();
    s = s.Left(s.GetLength() - 4);
    s += ".dat";LoadData(s);
      

  5.   

    改后缀用的着这么麻烦吗?要么用MoveFile,要么用PathRemoveExtension/PathAddExtension都可以。
      

  6.   

    谢谢大家。s3是写错了,应该是s1
    这样退出程序时候发生错误。不知道是哪里数组越界了。...
    s=fdlg->GetPathName(); 
    sprintf(s1, "%s", s); 
    strncpy(s2,s1,strlen(s1)-4); 
    s2[strlen(s1)-4]='\0'; 
    strcat(s2,".dat"); 
    s2[strlen(s1)]='\0';
    ...