Advertisement

MFC中打开文件与文件夹

  •  5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:None


简介:
本文介绍在Microsoft Foundation Classes (MFC)编程环境中如何实现打开文件和文件夹的功能,包括必要的API使用及示例代码。 MFC打开文件与文件夹的方法可以分为两种:一种是通过API实现的打开文件对话框功能;另一种则是利用MFC自身提供的方法来完成同样的任务。 ### 方法一:使用API ```cpp OPENFILENAME ofn; TCHAR szFile[MAX_PATH]; ZeroMemory(&ofn, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); ofn.lpstrFile = szFile; ofn.lpstrFile[0] = TEXT(\0); ofn.nMaxFile = sizeof(szFile); // 设置文件类型过滤器 const TCHAR* filterText = _T(所有文件\0*.?\0jpg 文件\0*.jpg\0bmp 文件\0*.bmp\0); ofn.lpstrFilter = const_cast(filterText); ofn.nFilterIndex = 1; // 默认选择第一个选项 if(GetOpenFileName(&ofn)) { ::SetDlgItemText(this->m_hWnd, IDC_EDIT1, szFile); } ``` ### 方法二:使用MFC ```cpp CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, NULL); if(dlg.DoModal() == IDOK) { CString szFilename = dlg.GetPathName(); ::MessageBox(NULL, szFilename, NULL, MB_OK); } ``` ### 打开文件夹的方法 ```cpp static TCHAR strDirName[MAX_PATH]; BROWSEINFO bi; CString szString = TEXT(选择一个源文件子文件夹); bi.hwndOwner = ::GetFocus(); bi.pidlRoot = NULL; bi.pszDisplayName = strDirName; bi.lpszTitle = szString; // 设置浏览选项 bi.ulFlags = BIF_BROWSEFORCOMPUTER | BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS; LPITEMIDLIST pItemIDList = ::SHBrowseForFolder(&bi); if(pItemIDList == NULL) { return ; } ::SHGetPathFromIDList(pItemIDList, strDirName); CString str = strDirName; // 确保路径以反斜杠结束 if(str != && str.Right(1) != _T(\\)) str += _T(\\); ::SetDlgItemText(this->m_hWnd,IDC_EDIT1,str); ``` 以上代码展示了如何利用MFC和Win32 API来实现文件与目录的选择功能。其中,打开文件夹的操作不同于直接选择单个文件,它允许用户指定一个包含多个子项的路径作为最终结果。

全部评论 (0)

还没有任何评论哟~
客服
客服
  • MFC
    优质
    本文介绍在Microsoft Foundation Classes (MFC)编程环境中如何实现打开文件和文件夹的功能,包括必要的API使用及示例代码。 MFC打开文件与文件夹的方法可以分为两种:一种是通过API实现的打开文件对话框功能;另一种则是利用MFC自身提供的方法来完成同样的任务。 ### 方法一:使用API ```cpp OPENFILENAME ofn; TCHAR szFile[MAX_PATH]; ZeroMemory(&ofn, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); ofn.lpstrFile = szFile; ofn.lpstrFile[0] = TEXT(\0); ofn.nMaxFile = sizeof(szFile); // 设置文件类型过滤器 const TCHAR* filterText = _T(所有文件\0*.?\0jpg 文件\0*.jpg\0bmp 文件\0*.bmp\0); ofn.lpstrFilter = const_cast(filterText); ofn.nFilterIndex = 1; // 默认选择第一个选项 if(GetOpenFileName(&ofn)) { ::SetDlgItemText(this->m_hWnd, IDC_EDIT1, szFile); } ``` ### 方法二:使用MFC ```cpp CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, NULL); if(dlg.DoModal() == IDOK) { CString szFilename = dlg.GetPathName(); ::MessageBox(NULL, szFilename, NULL, MB_OK); } ``` ### 打开文件夹的方法 ```cpp static TCHAR strDirName[MAX_PATH]; BROWSEINFO bi; CString szString = TEXT(选择一个源文件子文件夹); bi.hwndOwner = ::GetFocus(); bi.pidlRoot = NULL; bi.pszDisplayName = strDirName; bi.lpszTitle = szString; // 设置浏览选项 bi.ulFlags = BIF_BROWSEFORCOMPUTER | BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS; LPITEMIDLIST pItemIDList = ::SHBrowseForFolder(&bi); if(pItemIDList == NULL) { return ; } ::SHGetPathFromIDList(pItemIDList, strDirName); CString str = strDirName; // 确保路径以反斜杠结束 if(str != && str.Right(1) != _T(\\)) str += _T(\\); ::SetDlgItemText(this->m_hWnd,IDC_EDIT1,str); ``` 以上代码展示了如何利用MFC和Win32 API来实现文件与目录的选择功能。其中,打开文件夹的操作不同于直接选择单个文件,它允许用户指定一个包含多个子项的路径作为最终结果。
  • (MFC) 遍历及其子
    优质
    本教程讲解如何使用MFC(Microsoft Foundation Classes)在Windows环境下编写代码,实现遍历指定文件夹内所有文件及子文件夹中文件的功能。适合C++初学者和中级开发者学习。 在C++编程环境中使用Microsoft Foundation Classes(MFC)可以有效地构建Windows应用程序。本段落将详细介绍如何利用MFC遍历文件夹及其子文件夹中的所有文件,这一功能对于许多应用如文件管理和搜索工具来说十分实用。 遵循以下步骤进行操作: 1. **创建一个MFC项目**:在Visual Studio 2008中开始新项目的流程是选择“新建”>“项目”,然后从模板列表里选取“MFC应用程序”。记得选中“空项目”选项,这样可以允许我们自定义添加代码。 2. **引入必要的头文件**:为了遍历文件系统,需要在你的`stdafx.h`或`CMyApp.h`文件中包含以下两个头文件: ```cpp #include #include ``` 3. **定义一个用于递归查找的函数**:创建名为 `ListFiles` 的成员函数,它接受路径参数并采用递归方式遍历目录。这里提供了一个简单的实现: ```cpp void CMyApp::ListFiles(CString path) { CFileFind finder; CString searchPattern = path + _T(\\*.*); if (finder.FindFile(searchPattern)) { do { if (finder.IsDirectory()) { // 跳过.和..目录,并递归调用ListFiles处理子目录。 if (!finder.FindNextFile()) break; ListFiles(finder.GetFilePath()); } else { AfxMessageBox(finder.GetFileName()); // 处理每个文件,例如显示其名称 } } while (finder.FindNextFile()); } } 4. **调用遍历函数**:在程序的合适位置(如`InitInstance()`),传入要遍历的目录路径来调用 `ListFiles` 函数。 5. **处理用户界面事件**:若希望应用程序能够响应用户的双击操作,比如打开选中的文件,则需要创建一个用于显示文件名的列表控件,并在消息映射中添加相应的通知: ```cpp ON_NOTIFY(NM_DBLCLK, IDC_LISTCTRL, OnDblclkListctrl) ``` 6. **实现事件处理函数**:当用户双击某一项时,应用程序会调用 `OnDblclkListctrl` 函数来打开对应文件。 ```cpp void CMyApp::OnDblclkListctrl(NMHDR* pNMHDR, LRESULT* pResult) { LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast(pNMHDR); // 获取双击的文件名,并执行相应的操作 CString filePath = GetSelectedFilePath(IDC_LISTCTRL); // 定义获取选中项路径的方法 ShellExecute(NULL, _T(open), filePath, NULL, NULL, SW_SHOWNORMAL); *pResult = 0; } 7. **更新用户界面**:在`ListFiles`函数内部,可以将找到的文件添加到列表控件(如 `CListCtrl`)中以便显示。这通常包括使用适当的插入行方法来加载数据,并根据需要调整列设置。 通过上述步骤,你可以创建一个简单的MFC应用程序,它能够遍历指定目录及其子目录下的所有文件并在用户界面上展示出来;当双击某项时,程序会利用默认的关联软件打开该文件。实际应用中可能还需要考虑更多的细节处理如错误管理、性能优化和用户体验等。
  • 在Unity电脑上的
    优质
    本教程详细介绍如何在Unity开发环境中实现从项目内部访问并操作电脑上特定文件或文件夹的功能。适合需要集成外部数据到游戏项目的开发者学习。 依赖cmdlg32.dll封装的打开文件夹和文件的方法可以直接使用。
  • MFC 选取路径
    优质
    本教程详解如何使用MFC(Microsoft Foundation Classes)在Windows应用程序中实现选择文件和文件夹的功能,包括代码示例与界面设计。 在使用VS中的MFC开发选择文件或文件夹路径的功能时,可以利用VC++2010提供的相关API来实现这一需求。此功能通常涉及打开一个对话框让用户选取特定的文件或者目录,并获取用户所选的具体路径信息。具体实现方法可以根据项目的实际需要进行调整和优化。
  • Unity(Windows, Mac)以选择和封装
    优质
    本教程详细介绍了在Unity开发环境中如何于Windows及Mac系统下打开文件夹、选取资源以及封装文件的方法,帮助开发者更高效地管理项目资源。 Unity桌面开发涉及在Windows和Mac系统上打开文件夹并选择文件的封装操作。
  • MFC并读取.csv
    优质
    本教程详细介绍如何使用Microsoft Foundation Classes (MFC)在Windows应用程序中打开和读取CSV格式的文件。通过实例代码演示文件操作技巧。 最近在做一个小算法,需要从外部导入数据。我通过将Excel文档保存为CSV文件来完成数据的导入与使用,并且会把生成的结果导出成txt文件。由于积分不足,请留下您的邮箱地址。
  • 在VC++和MFC实现选择对话框
    优质
    本文将详细介绍如何在VC++环境下使用MFC框架开发自定义的选择文件夹和文件对话框功能,并提供具体代码示例。 在VC++和MFC中实现选择文件夹、选择文件对话框以及确定当前工作目录的功能。
  • 右键VSCode的.reg设置
    优质
    本教程介绍如何通过创建.reg文件来实现右键快捷方式,直接在VSCode中打开文件或整个文件夹,提高开发效率。 在文件夹和文件的右键菜单中增加“用VSCode打开”选项。注意:此功能仅在安装时未更改路径的情况下有效;如果已更改,请自行调整软件路径设置。
  • MFC读取并遍历的所有
    优质
    本教程介绍如何使用MFC(Microsoft Foundation Classes)在Windows环境下编写程序来读取和遍历指定文件夹内的全部文件,并提供代码示例。 在MFC环境下,读取文件夹,并遍历该文件夹下所有文件(包括子目录中的文件)。