VC里边打开文件夹

夜雨_倚琴 2007-07-24 11:07:16
各位大哥:
小弟现在要做一个基于命令行的一个程序。
要求可以打开一个文件或者批量的文件,对这些文件进行命令行操作。
所以我用VC做的就是一个截面封装。
可我有2点不大明白。
1,打开文件夹这个怎么来实现?用控件吗?

2,在VC里边如何调用命令行,谢谢!
...全文
2653 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
夜雨_倚琴 2007-07-26
  • 打赏
  • 举报
回复
你在上面回答我的问题我表示感谢
但你好象没读懂我的问题.
jhs1982419 2007-07-26
  • 打赏
  • 举报
回复
不需要那么麻烦,我以前做的个打开文件很简单方便,与大家分享下,要结帐哈,呵呵

我这个是打开图像文件并对每一幅图像操作,你可以稍微改下就OK了
  void CImageRetrievalDoc::OnImagefilesOpen()
{
// TODO: Add your command handler code here

CImageRetrievalApp* pApp = (CImageRetrievalApp*) AfxGetApp();


CImageRetrievalView* pView =
((CImageRetrievalView* )((CMainFrame* )pApp->GetMainWnd())->GetActiveView());



char path[MAX_PATH];; //用来存储路径的字符串
BROWSEINFO bi;//接收用户所选择的文件夹的参数信息
//ZeroMemory(&bi, sizeof(bi));//清空bInfo在内存中的空间,全部置零

bi.hwndOwner = AfxGetApp()->m_pMainWnd->GetSafeHwnd();//得到对话框父窗口的句柄
//CImageRetrievalApp* pApp = (CImageRetrievalApp*) AfxGetApp();//需要进行类型转换
//bi.hwndOwner = pApp->GetMainWnd()->GetSafeHwnd();//GetMainWnd()所得到的就是m_pMainWnd
bi.pidlRoot = NULL;
bi.pszDisplayName = path;
bi.lpszTitle = _T("请选择进行检索的图像库: ");//在对话框中显示字符
bi.ulFlags = BIF_EDITBOX|BIF_RETURNONLYFSDIRS; //增加一个编辑控件,用户可以在里面直接输入路径条目
bi.lpfn = NULL;
bi.lParam = 0;
bi.iImage = 0;

LPITEMIDLIST pidl; //用来保存返回信息的IDList
pidl = SHBrowseForFolder(&bi) ; //显示一可以使用户选择文件夹的对话框,返回值为LPITEMIDLIST类型

if(pidl != NULL) //用户按了确定按钮
{

//////////////////////////以下是在重新选择图像库时,以前的检索图像全部清空


pView->m_JiShu = 0;
pView->m_Seek_ListCtrl.DeleteAllItems();//以前检索的所有的图像列表全部清空

// pView->Seekimagepath = "";//清空显示图像
pView->Seekimage.load(" null.jpg");


for (int i=0;i<21;i++)//清空最前面图像的显示
{
pView->SelectImage[i].load(" null.jpg");
}


SHGetPathFromIDList(pidl, path);//把项目标识列表转化成字符串
FilePath = path; //将CHAR类型的字符串转换为CString类型的字符串
FilePath += "\\"; //在路径后好加上文件的名字
}

CHAR szFind[MAX_PATH];
lstrcpy(szFind, FilePath);
//lstrcat(szFind, "\\"); //因为在CImageRetrievalDoc::OnImagefilesOpen() 中,
//已经有一句Path += "\\";表示在后面加个

lstrcat(szFind, "*.jpg"); // 找所有jpg文件

//hFind = FindFirstFile(szFind, &FileData);
//if (FindFirstFile(szFind, &FileData) == INVALID_HANDLE_VALUE)
if((pView->hFind = FindFirstFile(szFind, &(pView->FileData))) == INVALID_HANDLE_VALUE)
{
pView->MessageBox("该文件夹中没有jpg图像,请重新选择");
return ;
}


// do
// {
// pView->TempStr[pView->Jishu] = pView->FileData.cFileName;
// pView->Seekimagepath[pView->Jishu] = pView->GetDocument()->FilePath+pView->TempStr[pView->Jishu];
// //将每个图像的路径Seekimagepath传给ondraw函数去重绘图,画出图来
// pView->AllSeekimage[pView->Jishu].load(pView->Seekimagepath[pView->Jishu]);
// pView->Jishu++;
//
// }
// while (FindNextFile(pView->hFind, &(pView->FileData)));




UpdateAllViews(NULL);
}
夜雨_倚琴 2007-07-25
  • 打赏
  • 举报
回复
回答8L的
我所说的命令行操作是指之前已做好的一个执行文件.
但是我现在只是做个界面让用户操作的时候不用敲命令行,举个例子:用户点一个按钮之后我就调用命令行来执行.

你刚才说用 execute()可以是吧,那我44看.

另外,告诉我怎么给分吧,我给你加5分(你回答了我第2个问题)嘿嘿.
夜雨_倚琴 2007-07-24
  • 打赏
  • 举报
回复
CStdioFile file(m_lf.GetPath(),CStdioFile::modeRead);

你是不是写错了,
感觉应该是 :CStdioFile file(fileDlg.m_lf.GetPath(),CStdioFile::modeRead);


feilonghai 2007-07-24
  • 打赏
  • 举报
回复
CString CSadDlg::BrowseFolder(HWND hWnd, LPCTSTR lpTitle)
{
// 调用 SHBrowseForFolder 取得目录(文件夹)名称
// 参数 hWnd: 父窗口句柄
// 参数 lpTitle: 窗口标题
char szPath[MAX_PATH]={0};
BROWSEINFO m_bi;

m_bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT;
m_bi.hwndOwner = hWnd;
m_bi.pidlRoot = NULL;
m_bi.lpszTitle = lpTitle;
m_bi.lpfn = NULL;
m_bi.lParam = NULL;
m_bi.pszDisplayName = szPath;
LPITEMIDLIST pidl = ::SHBrowseForFolder( &m_bi );
if ( pidl )
{
if( !::SHGetPathFromIDList ( pidl, szPath ) ) szPath[0]=0;

IMalloc * pMalloc = NULL;
if ( SUCCEEDED ( ::SHGetMalloc( &pMalloc ) ) ) // 取得IMalloc分配器接口
{
pMalloc->Free( pidl ); // 释放内存
pMalloc->Release(); // 释放接口
}
}
return szPath;
}
lnzcyj 2007-07-24
  • 打赏
  • 举报
回复
//这个有用,我刚刚打开过
void CLogView::OnFileOpen()
{
// TODO: Add your command handler code here
CFileDialog fileDlg(TRUE); //有用
fileDlg.m_ofn.lpstrTitle="日志文件打开对话框";//有用
fileDlg.m_ofn.lpstrFilter="log Files(*.log)\0*.log\0All Files(*.*)\0*.*\0\0";//有用

if(IDOK==fileDlg.DoModal())//有用
{
CClientDC dc(this);////处理流程
TEXTMETRIC tm;
dc.GetTextMetrics(&tm); //获取文字大小
RECT rc;
GetClientRect(&rc);
CString csTem;
fileDlg.GetFileName();
CStdioFile file(m_lf.GetPath(),CStdioFile::modeRead);
//file.Open(m_lf._szFileName,CStdioFile::modeReadWrite,NULL);
m_LineNum=0;
while (file.ReadString(csTem))
{
dc.TextOut(0,tm.tmHeight*m_LineNum,csTem);
m_LineNum++;

}
UpdateData(FALSE);
}
}
夜雨_倚琴 2007-07-24
  • 打赏
  • 举报
回复
呵呵
刚刚找了下,就是用CFileDialog可以实现对文件的打开,保存,分析等。

至于下面的在VC里边调用命令行,暂时还不知道怎么搞。
go_baby 2007-07-24
  • 打赏
  • 举报
回复
雖然我認真讀了三遍,可是我還是不知道你說的啥意思呀,大哥.

不過幫你頂一下哈.
xuxingok 2007-07-24
  • 打赏
  • 举报
回复
可以考虑用.bat对文件进行批处理~
emptyness 2007-07-24
  • 打赏
  • 举报
回复
个基于命令行的一个程序。

让使用者敲命令,想说的应该是控制台程序吧.
----------------------------------------
对这些文件进行命令行操作。

什么操作是命令行操作?
命令行操作系统不是给了么?
---------------------------
解答下吧LZ..

execute()可以调用,也可以指示显示不显示cmd....
直接使用cmd的命令不好么?
del copy copyx ...................
ccgxg 2007-07-24
  • 打赏
  • 举报
回复
CFileDialog

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧