比如
C:\WINDOWS\system32\test.exe我怎么把这个路径 分成C:\WINDOWS\system32和
test.exe非MFC
C:\WINDOWS\system32\test.exe我怎么把这个路径 分成C:\WINDOWS\system32和
test.exe非MFC
解决方案 »
- 我写了一个图像控件的类 大家帮我看看 怎么办
- RTP中转服务器如何指定特定用户转发?
- 在ActiveX控件中绘制真彩色BMP图片怎么变成黑白的了
- 请问Interlocked Variable Access、 Critical Section和Event 和 Mutex 的执行效率有何差异?
- 为啥get_body()后hr=S_OK可是指针却是NULL ?
- 有关职业规划
- 两个问题请教:
- 高手请进!操作系统如何运行程序?
- 大家来看看这个new问题?
- Win32有exe与dll之间数据共享的机制吗?
- Crystal Reports 2008服务器版的有效密钥及注册号.
- 为什么VC无法调用MD5C.C子程序?
char drive[MAX_PATH], dir[MAX_PATH], title[MAX_PATH], ext[MAX_PATH];
splitpath("c:\\WINDOWS\\System32\\test.exe", drive, dir, title,ext);
strcat(drive, dir);
strcat(title, ext);drive 和title就是你要的
void _splitpath( const char *path, char *drive, char *dir, char *fname, char *ext );
通过调用这个函数,可以将driver指向文件所在的盘符(如C:),dir指向文件的目录( \sample\crt\ ,这里没有盘符),fname指向文件的文件名(makepath,没有前面的路径),ext指向文件的扩展名(如.c,有带小数点)。
这样我们就可以得到这个文件的基本信息了。当然通过这些组合就可以得到相关文件的文件名的信息。例如得到文件的全名就可以用strcpy(.....)将*fname和*ext组合起来。
void CDlgDecNormal::OnDecryptTo()
{
char szDrv[_MAX_DRIVE], szDir[_MAX_DIR], szFile[_MAX_FNAME];
_splitpath(m_strSource,szDrv,szDir,szFile,NULL);
CString strTargetPath;
strTargetPath.Format("%s%s%s",szDrv,szDir,szFile);
strTargetPath+="\\"; CString strFiles; if (m_lcFiles.GetSelectedCount() <= 0)
{
CString str;
str = GetFileFullName( m_strSource );
if( m_strAddr.Find("\\")!=-1)
{
m_strAddr.Replace(str+"\\","");
m_strAddr+="\\";
}
else
m_strAddr.Replace(str,"");
CString str1;
str1 =m_strTargetFolder+ m_strAddr;
strFiles = m_strTargetFolder; CString strAdd;
CString strAll = str1 + "*.*";
_finddata_t fd = { 0 };
long hFile = _findfirst( strAll, &fd );
if( hFile != -1 )
{
do
{
if( strcmp( fd.name, "." ) == 0 || strcmp( fd.name, ".." ) == 0 )
continue;
strAdd.Format( "|%s%s", str1, fd.name );
strFiles += strAdd;
} while( _findnext( hFile, &fd ) == 0 );
_findclose( hFile );
}
}
else
{
CString strAdd;
strFiles = m_strTargetFolder;
POSITION pos = m_lcFiles.GetFirstSelectedItemPosition();
int nIndex; UpdateData();
CString strTemp;
int iIndex = m_strAddr.Find( "\\", 0 );
if ( iIndex >= 0 )
{
strTemp = m_strAddr.Mid( iIndex + 1 );
}
while (pos != NULL)
{
nIndex = m_lcFiles.GetNextSelectedItem(pos);
strAdd.Format("|%s%s\\%s",m_strTargetFolder, strTemp, m_lcFiles.GetItemText(nIndex,0));
strFiles += strAdd;
}
}
CDlgDecPath dlg(strFiles,FALSE,strTargetPath);
dlg.DoModal();
}本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/dkbrain/archive/2009/09/26/4596417.aspx
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
char fname[_MAX_FNAME];
char ext[_MAX_EXT]; _splitpath( path_buffer, drive, dir, fname, ext );
char path[] = "C:\\WINDOWS\\system32\\test.exe";
char *pLast = strrchr( path, '\\');
if ( pLast == NULL )
{
return;
}
char dir[MAX_PATH] = {0};
char exeName[MAX_PATH] = {0};
strcpy( exeName, pLast+1 );
*pLast = 0;
strcpy( dir, path );
直接使用_splitpath的前提是全路径的合法性是有保障的。如果没有保障而使用_splitpath,你需要初始化一下每个BUFFER,函数返回需要判断一下STRLEN是否为0,但这也不能保证万一,你可以试试"C::\\78",看看DIR返回是什么。
1、先将“C:\WINDOWS\system32\test.exe”字符串赋值给一个变量比如Temp.
2、寻找到最后一个“\”字符,然后截断字符串,
3、“\”字符以前字符串就是路径,剩下的自然就是文件名了。希望对你有帮助。