小弟写了一个涵数用来记录打开了的执行文件的文件名,专门用了一个容器vector来保存之,然后用messagebox显示出来,让我迷惑不解的是打开一个exe文件保存的记录是正常的,但是打开多个后保存的记录,读出来后始终是最后一次打开的.而不是不同的exe文件的文件名,现将代码如下:
vector<char *> ivec;void ReadHistoryFile(HWND hDlg)
{
SetCurrentDirectory(szSavePath);
TCHAR szFilenameR[MAX_PATH],szFileTitleR[MAX_PATH],szTitleR[MAX_PATH];
OPENFILENAME OfnR; strcpy(szFileTitleR,"打开");
strcpy(szTitleR,"打开"); szFilenameR[0] = '\0';
ZeroMemory(&OfnR, sizeof(OfnR));
OfnR.lStructSize = sizeof(OPENFILENAME);
OfnR.hwndOwner = hDlg;
OfnR.lpstrFilter = TEXT("打开(*. exe)\0*.exe\0All Files\0*.*\0\0");
OfnR.lpstrFile = szFilenameR;
OfnR.nMaxFile = sizeof(szFilenameR);
OfnR.lpstrFileTitle = szFileTitleR;
OfnR.nMaxFileTitle = sizeof(szFileTitleR);
OfnR.lpstrInitialDir = (LPSTR)NULL;
OfnR.Flags = OFN_SHOWHELP | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
OfnR.lpstrTitle = szTitleR; GetOpenFileName (&OfnR);
if(strlen(szFilenameR)>4)
{
strcpy(szReadFileName,szFilenameR);
// MessageBox(NULL,szReadFileName,szReadFileName,MB_OK);
///////////////////////
///////////////////////
char seps[] = "\\";
char szTMP[200];
char *token;
token = strtok( szReadFileName, seps );
while( token != NULL )
{
if(strstr(token,".exe")||strstr(token,".EXE"))
{
strcpy(szExeName,token);
ivec.push_back(szExeName);
vector<char *> ::iterator iter=ivec.begin();
vector<char *> ::iterator iter_end=ivec.end();
for(;iter!=iter_end;iter++)
{
MessageBox(NULL,*iter,*iter,MB_OK);
}
}
token = strtok( NULL, seps );
}
bAddPro=true;
}
// free( pitem );}
vector<char *> ivec;void ReadHistoryFile(HWND hDlg)
{
SetCurrentDirectory(szSavePath);
TCHAR szFilenameR[MAX_PATH],szFileTitleR[MAX_PATH],szTitleR[MAX_PATH];
OPENFILENAME OfnR; strcpy(szFileTitleR,"打开");
strcpy(szTitleR,"打开"); szFilenameR[0] = '\0';
ZeroMemory(&OfnR, sizeof(OfnR));
OfnR.lStructSize = sizeof(OPENFILENAME);
OfnR.hwndOwner = hDlg;
OfnR.lpstrFilter = TEXT("打开(*. exe)\0*.exe\0All Files\0*.*\0\0");
OfnR.lpstrFile = szFilenameR;
OfnR.nMaxFile = sizeof(szFilenameR);
OfnR.lpstrFileTitle = szFileTitleR;
OfnR.nMaxFileTitle = sizeof(szFileTitleR);
OfnR.lpstrInitialDir = (LPSTR)NULL;
OfnR.Flags = OFN_SHOWHELP | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
OfnR.lpstrTitle = szTitleR; GetOpenFileName (&OfnR);
if(strlen(szFilenameR)>4)
{
strcpy(szReadFileName,szFilenameR);
// MessageBox(NULL,szReadFileName,szReadFileName,MB_OK);
///////////////////////
///////////////////////
char seps[] = "\\";
char szTMP[200];
char *token;
token = strtok( szReadFileName, seps );
while( token != NULL )
{
if(strstr(token,".exe")||strstr(token,".EXE"))
{
strcpy(szExeName,token);
ivec.push_back(szExeName);
vector<char *> ::iterator iter=ivec.begin();
vector<char *> ::iterator iter_end=ivec.end();
for(;iter!=iter_end;iter++)
{
MessageBox(NULL,*iter,*iter,MB_OK);
}
}
token = strtok( NULL, seps );
}
bAddPro=true;
}
// free( pitem );}
void CDlgMp3FileList::OnButtonAddfile()
{
// TODO: Add your control notification handler code here
CFileDialog dlg( TRUE, NULL, NULL,
OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT|OFN_ENABLESIZING,
"Mp3音乐文件|*.mp3||", this ); TCHAR szFiles[81920] = { 0 };
dlg.m_ofn.lpstrFile = szFiles;
dlg.m_ofn.nMaxFile = 81920; dlg.DoModal(); CString strFolder = CString( szFiles );
LPCTSTR pszFile = szFiles + strFolder.GetLength() + 1; // 加入到播放列表
if ( *pszFile )
{
for ( strFolder += '\\' ; *pszFile ; )
{
m_ctlFileList.AddString( strFolder + pszFile );
pszFile += _tcslen( pszFile ) + 1;
}
}
}
std::vector<char [MAX_PATH]> ivec;
CString也行
用string的话我 不会用
ivec.push_back(szExeName);
vector<string> ::iterator iter=ivec.begin();
vector<string> ::iterator iter_end=ivec.end();
for(;iter!=iter_end;iter++)
{
MessageBox(NULL,*iter,*iter,MB_OK);
}
这行MessageBox(NULL,*iter,*iter,MB_OK);会报错
这么用:MessageBox( NULL, (*iter).c_str(), (*iter).c_str(), MB_OK );