问一个相关路径的问题

时间:2022-02-25 04:33:04
我在一个VC2005的项目中一个解决方案下有一个配置文件,使用GetPrivateProfileString获取这个配置文件的内容,配置文件和他调用的类在一个文件夹中,我在GetPrivateProfileString函数中的最后一个参数中设置了文件夹下的相对路径".\\stateserver.ini",结果总是取不到文件中的值,我将这个路径设置成绝对路径,就能取到其中的值了,我想请教一下,我的相对路径写错了吗,应该怎么写?配置文件和调用它的类在同一个文件夹中

10 个解决方案

#1


If this parameter does not contain a full path to the file, the system searches for the file in the Windows directory. 

#2


路径没问题,放在exe的同一目录下就好了。

如果是调试的话需要放在工程目录下,否则就需要手动设置调试目录。

#3


最好使用绝对路径,用GetModuleFileName()得到exe模块的路径,然后拼成ini文件的路径

#4


是这样的,我现在调试这个程序,所以放在了相同的目录下,问一下,是不是exe文件夹下也需要添加一个ini文件吗

#5


我在exe文件夹下也放了一个ini文件,但还是读不到,这个写法我过去写过,好用啊,怎么突然不好用了呢

#6


对拉,我想问一下,设置相对路径时是应该制定到类的同一个文件夹下,还是指定到exe的文件夹下呢

#7



CString CMyFormats::GetCurrentPathName(PathType type/* = 0*/)
{
TCHAR  pFileName[MAX_PATH]; 

if(type == Path_WorkFolder) //工作路径,
{
int nPos = GetCurrentDirectory( MAX_PATH, pFileName); 

CString csFullPath(pFileName);  
if( nPos < 0 ) 
return CString(""); 
else 
return csFullPath; 
}
else 
{
HMODULE module = GetModuleHandle(0); 
GetModuleFileName(module, pFileName, MAX_PATH); 

CString csFullPath(pFileName); 
if(type == Path_ExeFolder)   //应用程序所在路径/debug路径,不包括文件名
{
int nPos = csFullPath.ReverseFind( _T('\\') );
if( nPos < 0 ) 
return CString(""); 
else 
return csFullPath.Left( nPos );
}
else if(type == Path_FullPath) //应用程序路径,包括文件名
{
return csFullPath;
}
else if(type == Path_ExeName) //应用程序名,不包括路径
{
int nPos = csFullPath.ReverseFind( _T('\\') );
if( nPos < 0 ) 
return CString(""); 
else 
return csFullPath.Right(csFullPath.GetLength() - nPos - 1);
}
else if(type == Path_ExeDisk) //应用程序磁盘D:
{
int nPos = csFullPath.Find( _T('\\') );
if( nPos < 0 ) 
return CString(""); 
else 
return csFullPath.Left(nPos);
}
}

return CString(""); 
}

CString path= GetCurrentPathName(Path_ExeFolder)+ “\\stateserver.ini";


使用绝对路径

#8


相对路径是相对于当前的工作目录,而不是相对于exe所在的目录

在IDE启动调试时当前的工作目录一般是*.sln*dsw所在目录而不是debug/release目录,这和从debug/release目录中启动exe不一样

#9


一般相对路径,文件放在*.vcproj同一文件夹中。。。

#10


好的,使用7楼的方法解决啦,谢谢9楼,我再试试你的方法

#1


If this parameter does not contain a full path to the file, the system searches for the file in the Windows directory. 

#2


路径没问题,放在exe的同一目录下就好了。

如果是调试的话需要放在工程目录下,否则就需要手动设置调试目录。

#3


最好使用绝对路径,用GetModuleFileName()得到exe模块的路径,然后拼成ini文件的路径

#4


是这样的,我现在调试这个程序,所以放在了相同的目录下,问一下,是不是exe文件夹下也需要添加一个ini文件吗

#5


我在exe文件夹下也放了一个ini文件,但还是读不到,这个写法我过去写过,好用啊,怎么突然不好用了呢

#6


对拉,我想问一下,设置相对路径时是应该制定到类的同一个文件夹下,还是指定到exe的文件夹下呢

#7



CString CMyFormats::GetCurrentPathName(PathType type/* = 0*/)
{
TCHAR  pFileName[MAX_PATH]; 

if(type == Path_WorkFolder) //工作路径,
{
int nPos = GetCurrentDirectory( MAX_PATH, pFileName); 

CString csFullPath(pFileName);  
if( nPos < 0 ) 
return CString(""); 
else 
return csFullPath; 
}
else 
{
HMODULE module = GetModuleHandle(0); 
GetModuleFileName(module, pFileName, MAX_PATH); 

CString csFullPath(pFileName); 
if(type == Path_ExeFolder)   //应用程序所在路径/debug路径,不包括文件名
{
int nPos = csFullPath.ReverseFind( _T('\\') );
if( nPos < 0 ) 
return CString(""); 
else 
return csFullPath.Left( nPos );
}
else if(type == Path_FullPath) //应用程序路径,包括文件名
{
return csFullPath;
}
else if(type == Path_ExeName) //应用程序名,不包括路径
{
int nPos = csFullPath.ReverseFind( _T('\\') );
if( nPos < 0 ) 
return CString(""); 
else 
return csFullPath.Right(csFullPath.GetLength() - nPos - 1);
}
else if(type == Path_ExeDisk) //应用程序磁盘D:
{
int nPos = csFullPath.Find( _T('\\') );
if( nPos < 0 ) 
return CString(""); 
else 
return csFullPath.Left(nPos);
}
}

return CString(""); 
}

CString path= GetCurrentPathName(Path_ExeFolder)+ “\\stateserver.ini";


使用绝对路径

#8


相对路径是相对于当前的工作目录,而不是相对于exe所在的目录

在IDE启动调试时当前的工作目录一般是*.sln*dsw所在目录而不是debug/release目录,这和从debug/release目录中启动exe不一样

#9


一般相对路径,文件放在*.vcproj同一文件夹中。。。

#10


好的,使用7楼的方法解决啦,谢谢9楼,我再试试你的方法