C++Builder 程序员博客
3 Sep
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("\\"));//去掉最后一个"\"