很久没搞VC了。。现在搞下有问题了。。
文件内容如下。。
[ftp]
host=127.0.0.1
UserName=xin程序如下
char buf1[MAX_PATH];
GetCurrentDirectory(MAX_PATH,buf1);
CString strFileName = buf1;
if(strFileName[strFileName.GetLength() - 1] != '\\')
strFileName += "\\";
strFileName += "setting.ini";
char buf[1024];
int len = GetPrivateProfileString("ftp","host","",buf,1024,strFileName);
buf[len] = 0;
MessageBox(buf);
结果出不来我把文件名那里改成".\\setting.ini"也不可以。。直接打绝对路径进去就可以。。
我是直接在DEBUG文件夹下运行程序的。。那ini文件也在那里。。请指教

解决方案 »

  1.   

    建议DEBUG跟踪一下.
    应该是buf1不对,不要用GetCurrentDirectory获得当前目录,用GetModuleFileName获得全路径,然后解析出路径.
      

  2.   

    GetCurrentDirectory(MAX_PATH,buf1); 这个函数会因为有些操作(比如打开文件对话框)而改变。正确的获取当前程序路径的方法应该是:GetModuleFileName(buf1, MAX_PATH);
    strcpy(strrchr(buf1, '\\'), "\\setting.ini");
    char buf[1024];
    int len = GetPrivateProfileString("ftp","host","",buf,1024,buf1);
    buf[len] = 0;
    MessageBox(buf);
      

  3.   

    用了GetModuleFileName函数了。。而且获取到的文件名也正确,还是不能获取啊。。
      

  4.   

    自己将strFileName打印出来,看下是不是正确路径,感觉肯定是路径不对了.
      

  5.   

    路径用MessageBox显示出来了没有问题啊。。
      

  6.   

    将strFileName打印出来吧,估计是路径搞错了.
      

  7.   

    又发现了个问题。。就是我直接用绝对路径的时候,如果软件跟那ini文件在同一目录也是不可以的。。要不同目录才行。。真邪了。。
      

  8.   

    memset( g____INI_name, 0, ININAMESIZE );
    strcat( g____INI_name, ( LPCTSTR )GetMyPath() );
    strcat( g____INI_name, "setting.ini" );
    CString
    GetMyPath( void )
    {
    CString s;
    char tt[ 512 ] = "";
    int i = strlen( __argv[ 0 ] );
    memcpy( tt, __argv[ 0 ], i ); while( tt[ i ] != '\\' )
    {
    tt[ i ] = 0;
    i--;
    } s = ( CString )tt;
    return s;
    }
      

  9.   


    char buf1[MAX_PATH];
    GetModuleFileName(NULL,buf1,MAX_PATH);
    int i = strlen(buf1);
    buf1[i] = 0;
    while(buf1[i] != '\\')
    {
    buf1[i] = 0;
    --i;
    }
    strcat(buf1,"setting.ini");
    char buf[1024];
    MessageBox(buf1);
    int len = GetPrivateProfileString("ftp","host","",buf,1024,buf1);
    buf[len] = 0;
    MessageBox(buf);
    代码如上在VC上直接运行就可以在DEBUG目录下运行就不可以了。。弹出来的路径也是一样的。。
      

  10.   

    Rebuilding All,不要太粗心了,两个版本都Rebuilding All一下。
      

  11.   

    重建全部之后两个版本都不行。。在VC直接CTRL + F5就可以