BCB中的ExtractFilePath()函数可以得到应该程序的当前目录,我要得到应用程序的上一级目录,在BCB中有没有函数可以直接得到的?

"C:\Program files\kk\Mypro.exe"
"C:\Program files\..\"
"C:\Program files"

把第一行去掉后面两个"\"以后的内容,然后加上"..\"得到第二行的内容,
第二行就等同于第三行

AnsiString str=ExtractFilePath(Application->ExeName);
str=str.Delete(str.Length(),1);//去掉最后一个"\"
str=ExtractFilePath(str);//注意根目录的情况

#include <string>
using namespace std;

/*取父路径函数*/
AnsiString GetParentPath(const AnsiString& path)
{
    string strPath=path.c_str();
    string::size_type pos1,pos2;
    pos1=strPath.rfind("\\");
    if(pos1!=string::npos)
    {
        if(pos1==strPath.length()-1)//是E:\test\test\这种情况
        {
            pos2=strPath.rfind("\\",pos1-1);
            if(pos2!=string::npos)
              return strPath.substr(0,pos2).c_str();
        }
        else if(pos1 <strPath.length()-1)//是E:\test\test这种情况
        {
            return strPath.substr(0,pos1).c_str();
        }
    }
    return "";
}

写个递归就好了
void ExtractParentPath(String&FinalPath)
{
  FinalPath.delete(1,FinalPath.Pos("\\");
  if(FinalPath.Pos("\\")
    ExtractParentPath(FinalPath);
}

调用上述过程

比如说在按钮事件中加入
  String FilePath=GetCurrentDir();
  String FinalPath=FilePath;
  ExtractParentPath(FinalPath);
  FilePath.Delete(FilePath.Length()-FinalPath.Length()+1,FinalPath.Length());

这个FilePath就百分百是你的程序目录的上一级目录了.

记得好像有倒过来搜索的过程的.不过不记得怎样做了.倒就过就方便多了.一句Delete就摆平了.

    ExtractFilePath(FileName:String)    该函数返回路径名,其结尾字符总是“\”   
   
    ExtractFileDir(FileName:String)    该函数同样返回路径名,但不包括结尾的字符“\”,除非返回的路径是根目录。  
   

ExtractFileDrive :返回完整文件名中的驱动器,如"C:"
ExtractFilePath:返回完整文件名中的路径,最后带“/”,如"C:\test\"
ExtractFileDir:返回完整文件名中的路径,最后不带“/” ,如"C:\test"
ExtractFileName:返回完整文件名中的文件名称 (带扩展名),如"mytest.doc"
ExtractFileExt 返回完整文件名中的文件扩展名(带.),如".doc"

楼上的大哥似乎理解错楼主想要的路径
c:\aaa\bbb\ccc\XXX.exe
楼主想要的是c:\aaa\bbb或者是c:\aaa\bbb\
系统提供的一个都没有

AnsiString str=ExtractFilePath(Application->ExeName);
str=str.SubStr(1,str.Length()-1);//去掉最后一个"\"
str=str.SubStr(1,str.LastDelimiter("\\"));//去掉最后一个"\"