在WINDOW程序中,可以直接调用MFC封装好的函数来得到文件的路径。
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();
}
转自 守望天使飞过的博客