MFC获取程序路径
MFC程序中如何接受命令行参数
在MFC程序中,可以用以下几种方法来获取命令行参数。
为方便说明,我们假设执行了命令:C:\test\app.exe -1 -2方法一::GetCommandLine();将获取到"C:\test\app.exe" -1 -2方法二for (int i=0;i<__argc;i++){__argv[i];将依次得到C:\test\app.exe -1 -2}方法三AfxGetApp()->m_lpCmdLine;将获取到-1 -2获取命令行的方法:1、GetCommandLine() 获取输入的所有信息,包括程序所在路径及参数2、AfxGetApp()->m_lpCmdLine 只包含参数一般情况下,获取到命令行后就可以针对命令行中的内容进行相应的处理了CObject└CCommandLineInfo类CCommandLineInfo用于分析启动应用时的命令行参数。
MFC应用一般都会在它的应用对象中使用函数InitInstance创建这个类的一个本地实例。
然后把该对象传给CWinApp::ParseCommandLine,ParseCommandLine又重复调用ParseParam 填充CCommandLineInfo对象。
最后,CCommandLineInfo对象被传给CWinApp::ProcessShellCommand来处理命令行参数和选项。
BOOL CExampleApp::InitInstance(){...// 分析标准外壳命令、DDE、打开文件操作的命令行CCommandLineInfo cmdInfo;ParseCommandLine(cmdInfo);// 调度在命令行中指定的命令。
如果// 用/RegServer、/Register、/Unregserver 或/Unregister 启动应用程序,则返回FALSE。
if (!ProcessShellCommand(cmdInfo))return FALSE;...}void CWinApp::ParseCommandLine(CCommandLineInfo& rCmdInfo){for (int i = 1; i < __argc; i++){LPCTSTR pszParam = __targv[i];BOOL bFlag = FALSE;BOOL bLast = ((i + 1) == __argc);if (pszParam[0] == '-' || pszParam[0] == '/'){// remove flag specifierbFlag = TRUE;++pszParam;}rCmdInfo.ParseParam(pszParam, bFlag, bLast);}}这里有个继承CCommandLineInfo类的例子=====================目标让应用程序处理这里所见的命令行标志。
mfc savefiledialog 获取保存文件的后缀 -回复
mfc savefiledialog 获取保存文件的后缀-回复如何使用MFC中的SaveFileDialog获取保存文件的后缀?MFC(Microsoft Foundation Classes)是一组用于创建Windows应用程序的类库。
其中包含了许多用于用户界面和文件处理的类和函数。
在开发应用程序时,保存文件是一个经常需要处理的操作。
使用MFC的SaveFileDialog对话框,可以方便地获取用户想要保存文件的路径和名称。
但是,该对话框不会直接提供文件的后缀,下面将一步一步回答如何获取保存文件的后缀。
步骤1:创建MFC应用程序在开始之前,我们需要创建一个MFC应用程序。
可以使用Visual Studio 等集成开发环境来创建一个基本的MFC应用程序。
选择MFC应用程序向导时,需要选择对话框作为应用程序类型。
完成应用程序创建后,将会得到一个对话框类(CDialogEx)的实例。
步骤2:添加保存文件对话框在对话框资源中,双击对话框的图标,将打开对话框编辑器。
在对话框编辑器中,添加一个按钮控件用来触发保存文件对话框。
步骤3:添加按钮响应函数在对话框类的头文件中,为按钮添加响应函数。
打开对话框的类头文件,找到相应的IDI对话框消息映射宏,然后在其下方添加按钮的响应函数声明,如下所示:afx_msg void OnBnClickedSaveFileButton();然后,在类的源文件中为按钮的响应函数添加代码。
打开对话框的类源文件,找到相应的按钮响应函数的实现宏,然后在其下方添加响应函数的实现代码,如下所示:void CSaveFileDialogDlg::OnBnClickedSaveFileButton(){TODO: Add your control notification handler code here}步骤4:添加保存文件对话框的代码在按钮的响应函数中,添加保存文件对话框的代码。
在MFC中,我们可以通过调用CFileDialog类的DoModal函数来显示保存文件对话框,并获取用户选择的文件路径和名称。
MFC–通过spy++查找应用程序菜单对应函数的方法学步园
MFC–通过spy++查找应用程序菜单对应函数的方法学步园
当一个应用程序比较大时,菜单比较多时,特别是初次接触这个程序的源码时,就会很难找到这个程序的入口点。
下面通过SPY++可以很快速的获取到这个入口(程序要有源代码)
1、运行这个应用程序,例如a.exe,此时打开spy++,将Window找到当前a.exe,再将Messages只捕捉WM_COMMAND 消息。
2、操作一个a.exe上想找到入口的一个菜单,spy++会捕捉到这个消息;
3、可以看到这个消息的WM_COMMAND的消息wID是:33836,根据这个id到源文件中resource.h中查找,可以找到类似于下面的一句话:
#define ID_XX_XXXX 33836
这里的ID_XX_XXXX就是要找的消息菜单id,再到源文件中找ID_XX_XXXX,就会找到类似于下面的语句:
ON_COMMAND(ID_XX_XXXX, OnXXXX)
此时函数OnXXXX就是这个消息响应的函数。
用MFC实现文件拖放(获得文件路径)
DragAcceptFiles();//向file manager注册自己,使自己能接受droped file(s) CRect rect(0,0,100,80); m_View_List.Create(WS_VISIBLE|WS_VSCROLL,rect,this,IDC_VIEW_LIST);//创建listbox
void CMyDragView::OnDropFiles(HDROP hDropInfo) { // TODO: Add your message handler code here and/or call default int DropCount=DragQueryFile(hDropInfo,-1,NULL,0);//取得被拖动文件的数目 for(int i=0;i< DropCount;i++) { //取得第i个拖动文件名所占字节数 int NameSize=DragQueryFile(hDropInfo,i,NULL,0); HANDLE hHeap=GetProcessHeap(); //根据字节数分配缓冲区 //char *pName=new char[++NameSize]; char *pName=(LPSTR)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,NameSize++);
1、用MFC Appwizard创建一个基于SDI的新工程,命名为Drag,除第一步选择第一项以外,其余全用默认设置。
2、DragView.h文件
Hale Waihona Puke CListBox m_View_List;
3、DragView.cpp文件
---- 用classwizard添加WM_CREATE消息响应,然后在OnCreate函数中添加如下代码:
获取应用程序的工作路径
1.System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
D:\Documents\Visual Studio 2010\Projects\HandleXMLTool\HandleXMLTool\bin\Debug\HandleXMLTool.vshost.exe
}
else
{
path = AppDomain.CurrentDomain.BaseDirectory + "Bin\";
}
于是我们可以使用如下的代码
string path = "";
if (System.Environment.CurrentDirectory == AppDomain.CurrentDomain.BaseDirectory)//Windows应用程序则相等
{
path = AppDomain.CurrentDomain.BaseDirectory;
5.System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase
D:\Documents\Visual Studio 2010\Projects\HandleXMLTool\HandleXMLTool\bin\Debug\
// 获取启动了应用程序的可执Байду номын сангаас文件的路径,包括可执行文件的名称。
7.System.Windows.Forms.Application.StartupPath
D:\Documents\Visual Studio 2010\Projects\HandleXMLTool\HandleXMLTool\bin\Debug
mfc中文件夹路径设置方法
1.百度之后,得到如下解决方案:char szSelected[MAX_PATH];//用来存放文件夹路径BROWSEINFO bi;LPITEMIDLIST pidl;2. 2bi.hwndOwner = this->m_hWnd;bi.pidlRoot = NULL;bi.pszDisplayName = szSelected;3. 3bi.lpszTitle = "选择输出文件路径";bi.ulFlags = BIF_RETURNONLYFSDIRS;bi.lpfn = NULL;bi.lParam = NULL;bi.iImage = NULL;4. 4if((pidl = SHBrowseForFolder(&bi)) != NULL){if(SUCCEEDED(SHGetPathFromIDList(pidl, szSelected)))//得到文件夹的全路径,不要的话,只得本文件夹名{m_strFileOut = szSelected;}}其效果如下图// 打开要修改的文件的路径void CFileHandlingDlg::OnBnClickedButton1(){UpdateData(TRUE);// 呼出文件夹BROWSEINFO bi = {0};ITEMIDLIST *pidl;TCHAR szPath[MAX_PATH];bi.hwndOwner = m_hWnd;bi.pszDisplayName = szPath;bi.lpszTitle = TEXT("选择一个要处理的smali文件的路径:"); bi.ulFlags = BIF_RETURNONLYFSDIRS;if( pidl=SHBrowseForFolder(&bi) ){SHGetPathFromIDList( pidl, szPath );//return ;}if (NULL == pidl) // 如果没有选择文件路径,{return ;}m_StrSmaliPath = szPath; // szPath即是文件夹的路径UpdateData(FALSE);// TODO: 在此添加控件通知处理程序代码}// 选择一个文件的路径void CFileHandlingDlg::OnBnClickedButton2(){CString filter;filter="文本文档(*.xml)|*.xml|";CFileDialogdlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,filter); if(dlg.DoModal()==IDOK){m_XmlFile1=dlg.GetPathName();UpdateData(FALSE);}// TODO: 在此添加控件通知处理程序代码}MFC选择目录SHBrowseForFolder选择文件CFileDialog对话框设置默认路径CFileDialog会自动记住上一次路径,SHBrowseForFolder需要写个回调函数,传值给BROWSEINFOBaseFunc.h#include <string>using namespace std;namespace BaseFunc{// 选择文件,可设置定位到默认目录unsigned selFile(string &strFile,const string &strExt,bool bOpen);// 选择目录,可设置定位初始目录unsigned selDir(string &strDir,void *hwnd = NULL);}BaseFunc.cpp#include "stdafx.h"#include <Windows.h>#include "BaseFunc.h"using namespace std;using namespace BaseFunc;unsigned BaseFunc::selFile( string &strFile,const string &strExt,bool bOpen ) {string strDir = "D:\\Downloads";//这里通过strFile解析目录,CFileDialog会自动记住string filename = "hi.txt"; //通过strFile解析文件名string filter = strExt + "文件 (*." + strExt + ")|*." + strExt + "||";string ext = "." + strExt;CFileDialog dlg(bOpen,ext.c_str(),filename.c_str(),OFN_READONLY|OFN_O VERWRITEPROMPT,filter.c_str(),NULL);dlg.GetOFN().lpstrInitialDir = strFile.c_str();// 默认目录if (dlg.DoModal()){strFile = dlg.GetPathName();return IDOK;}return IDCANCEL;}int CALLBACK BrowseCallbackProc(HWND hwnd,UINT uMsg,LPARAM lParam,L PARAM lpData){switch(uMsg){case BFFM_INITIALIZED:::SendMessage(hwnd,BFFM_SETSELECTION,TRUE,lpData);break;}return0;}unsigned BaseFunc::selDir( string &strDir,void *hwnd/* = NULL*/ ){char szDir[MAX_PATH];BROWSEINFO bi;bi.hwndOwner = (HWND)hwnd;bi.pidlRoot = NULL;bi.pszDisplayName = szDir;bi.lpszTitle = "选择位置:";bi.iImage = 0;bi.ulFlags = BIF_USENEWUI | BIF_RETURNONLYFSDIRS; bi.lpfn = BrowseCallbackProc;bi.lParam = (LPARAM)(LPCTSTR)strDir.c_str();LPITEMIDLIST lp = SHBrowseForFolder(&bi);if (lp && SHGetPathFromIDList(lp,szDir)){strDir = szDir;return IDOK;}return IDCANCEL;}selDirDlg.cppvoid CselDirDlg::OnBnClickedButtonFile(){CString sFile;GetDlgItemText(IDC_EDIT_FILE,sFile);std::string strFile = sFile;if (IDOK == BaseFunc::selFile(strFile,"mp3",true)){SetDlgItemText(IDC_EDIT_FILE,strFile.c_str());}}void CselDirDlg::OnBnClickedButtonDir(){CString sDir;GetDlgItemText(IDC_EDIT_DIR,sDir);//可扩展个返回string std::string strDir = sDir;if (IDOK == BaseFunc::selDir(strDir,GetSafeHwnd())){SetDlgItemText(IDC_EDIT_DIR,strDir.c_str());}}需要源码的留下邮箱。
MFC中文件操作、查找与选择总结
MFC总结(一):MFC中文件操作、查找与选择总结(1)本文主要涉及以下几个方面,均为在MFC编程中较为常用的:CFile操作、CArchive操作、如何选择文件和文件夹、如何查找文件、获取当前目录、_access函数等。
(一)使用CFile类操作文件CFile类在MFC的文件操作中应该是最常用的了。
主要的成员函数有Open、Close、Write、Read、Seek、SeekToEnd、GetLength、GetPosition,具体用法见MSDN。
(1)文件打开操作:文件打开有两种方式,一种是先定义类对象,在用Open函数打开;一种是在定义类对象时传入文件名和打开方式。
分别如下CFile file;if(!file.Open(lpszFileName, nOpenFlags ))return;或CFile file(lpszFileName, nOpenFlags);(2)文件打开方式:文件打开方式,即上述nOpenFlags的值主要由一些宏定义的值组合而成,具体见MSDN,常用的有如下几种:A. CFile::modeCreate | CFile::modeNoTruncate |CFile::modeWrite,以写文件的方式打开,如果文件不存在,则新建文件,否则打开已有文件进行写入操作,此时不会清空原有文件;B. 将上述CFile::modeWrite更换为CFile::modeRead或者CFile::modeReadWrite可实现读操作或者同时读写。
(3)判断文件结束判断文件是否结束,没有结束则继续读取,否则关闭退出。
这点在编程时常用。
对于CFile常用的判断文件结束的方法是:while(file.GetPosition() < file.GetLength()){ //文件未结束//Add code ....}(4)值得注意的几点:A. 当文件名中包含路径时,要注意使用\\,如C:\\MyFile.DAT,在Unicode下时,需要使用_T("C:\\MyFile.DAT");B. 采用(2)中A方式写文件时,注意使用file.SeekToEnd()将文件指针移至文件尾,再写入,否则会覆盖已有的数据,这点经常被很多初学者忽视;C. 在打开文件后就要紧接着写下Close,养成这样的习惯,避免忘记关闭文件。
C与MFC获取系统已安装软件信息
C与MFC获取系统已安装软件信息.txt求而不得,舍而不能,得而不惜,这是人最大的悲哀。
付出真心才能得到真心,却也可能伤得彻底。
保持距离也就能保护自己,却也注定永远寂寞。
#include "iostream"#include <windows.h>#include <tchar.h>using namespace std;LRESULT GetValue(HKEY hKey, LPCTSTR name, LPTSTR value, LPLONG size){return ::RegQueryValueEx(hKey, name, NULL, NULL, (LPBYTE)value, (LPDWORD)size);}void DumpSoftware(LPCTSTR szKey , HKEY hParent){LRESULT lr;HKEY hKey;LONG size;TCHAR buffer[MAX_PATH] ;lr = RegOpenKey(hParent, szKey, &hKey);//不能打开注册表if(lr != ERROR_SUCCESS){cout << _T("不能打开注册表!") << szKey << _T("(") << lr << _T(")") << endl; return;}size = sizeof(buffer);lr = GetValue(hKey, _T("DisplayName"), &buffer[0], &size);//注册表打开成功if(lr == ERROR_SUCCESS){if(size > 0){cout << _T("显示名字:" ) << buffer << endl;}}else{size = sizeof(buffer);lr = GetValue(hKey, _T("QuietDisplayName"), &buffer[0], &size);if(ERROR_SUCCESS== lr && size > 0 ){cout << _T("显示名字:" ) << buffer << endl;}}size = sizeof(buffer);lr = GetValue(hKey, _T("DisplayVersion"), &buffer[0], &size);//获取软件版本号if(ERROR_SUCCESS == lr && size > 0){cout << _T("软件版本号:") << buffer << endl;}size = sizeof(buffer);lr = GetValue(hKey, _T("Publisher"), &buffer[0], &size);//软件开发商if(ERROR_SUCCESS == lr && size > 0){cout << _T("开发商:") << buffer << endl;}size = sizeof(buffer);lr = GetValue(hKey, _T("InstallLocation"), &buffer[0], &size);//获取安装路径if(ERROR_SUCCESS == lr && size > 0){cout << _T("安装路径:") << buffer << endl;}size = sizeof(buffer);lr = GetValue(hKey, _T("InstallSource"), &buffer[0], &size);//获取安装源if(ERROR_SUCCESS == lr && size > 0){cout << _T("安装源:") << buffer << endl;}size = sizeof(buffer);lr = GetValue(hKey, _T("UninstallPath"), &buffer[0], &size);//获取卸载路径if(ERROR_SUCCESS == lr && size > 0){cout << _T("卸载路径:") << buffer << endl;}size = sizeof(buffer);lr = GetValue(hKey, _T("UninstallString"), &buffer[0], &size);//软件卸载命令if(ERROR_SUCCESS == lr && size > 0){cout << _T("软件卸载命令:") << buffer << endl;}RegCloseKey(hKey);}int main(int argc, char* argv[]){unsigned long index;TCHAR buffer[MAX_PATH];HKEY hKey;LRESULT lr;lr = RegOpenKey(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall"), & hKey);if(lr != ERROR_SUCCESS){cout << _T("不能打开注册表!") << lr << endl;return -1;}for(index =0; ;index++){lr = RegEnumKey(hKey, index, &buffer[0], sizeof(buffer));switch(lr){case ERROR_SUCCESS:DumpSoftware(buffer,hKey);break;case ERROR_NO_MORE_ITEMS:cout<<_T("完成软件搜索!") << endl;RegCloseKey(hKey);return 0;default:cout<<_T("未能完成软件搜索!") << lr << endl;RegCloseKey(hKey);return -2;}}cout<<_T("完成软件搜索!") << endl;RegCloseKey(hKey);return 0;}。
mfc getfile 路径格式
mfc getfile 路径格式MFC(Microsoft Foundation Class)是微软提供的一套面向对象的C++类库,用于开发Windows应用程序。
在MFC中,可以使用CFileDialog类来实现文件对话框,从而获取文件的路径。
在使用CFileDialog类的GetPathName函数时,可以获得用户选择的文件的完整路径,包括文件名和文件所在的文件夹路径。
路径格式通常是一个字符串,表示文件在计算机中的位置。
在Windows操作系统中,文件路径通常采用以下格式:绝对路径,表示文件在文件系统中的具体位置,例如,C:\Folder\file.txt。
相对路径,表示文件相对于当前工作目录的位置,例如,..\Folder\file.txt。
此外,路径格式还可能包括特殊的符号和转义字符,用于表示特定的路径信息,比如:反斜杠(\)用于分隔文件夹和文件名。
点号(.)和双点号(..)用于表示当前目录和上级目录。
特殊文件夹名称,如“我的文档”可以用特殊的系统变量表示,例如,%USERPROFILE%\Documents。
在使用MFC的CFileDialog类获取文件路径时,可以根据需要对路径格式进行处理,例如检查路径的有效性、转换相对路径为绝对路径等操作。
另外,还可以使用MFC提供的其他类和函数来对路径进行进一步的操作,比如CPath类可以用于解析和操作文件路径,CString类可以用于字符串处理等。
总之,MFC中获取文件路径的格式通常是一个表示文件在计算机中位置的字符串,可以是绝对路径或相对路径,并可能包括特殊的符号和转义字符。
在使用时,需要根据具体需求对路径进行适当的处理和操作。
用MFC实现文件拖放(获得文件路径)
用MFC实现文件拖放(获得文件路径)1、用MFC Appwizard创建一个基于SDI的新工程,命名为Drag,除第一步选择第一项以外,其余全用默认设置。
2、DragView.h文件CListBox m_View_List;3、DragView.cpp文件---- 用classwizard添加WM_CREATE消息响应,然后在OnCreate函数中添加如下代码:DragAcceptFiles();//向file manager注册自己,使自己能接受droped file(s) CRect rect(0,0,100,80); m_View_List.Create(WS_VISIBLE|WS_VSCROLL,rect,this,IDC_VIEW _LIST);//创建listbox4、Resource.h---- 修改Resource.h文件,为listbox的ID(IDC_VIEW_LIST)分配一个值---- 例如:#define IDC_VIEW_LIST 10005、DragView.cpp文件---- 用classwizard添加WM_SIZE消息响应,然后在OnSize函数中添加如下代码:---- m_View_List.MoveWindow(0,0,cx,cy);//使listbox所占区域始终保持与客户区一样大6、DragView.cpp文件---- 用classwizard添加WM_DROPFILES消息响应,然后在OnDropFiles函数中添加如下代码:void CMyDragView::OnDropFiles(HDROP hDropInfo) { // TODO: Add your message handler code here and/or call default int DropCount=DragQueryFile(hDropInfo,-1,NULL,0);//取得被拖动文件的数目 for(int i=0;i< DropCount;i++) { //取得第i个拖动文件名所占字节数int NameSize=DragQueryFile(hDropInfo,i,NULL,0); HANDLE hHeap=GetProcessHeap(); //根据字节数分配缓冲区//char *pName=new char[++NameSize]; char *pName=(LPSTR)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,Name Size++);if (pName==NULL) { MessageBox("给文件名分配暂存空间时出错!","错误信息",MB_ICONERROR); return; } DragQueryFile(hDropInfo,i,pName,NameSize);//把文件名拷贝到缓冲区 m_View_List.AddString(pName);//文件名加入listbox中显示//delete [] pName;//释放缓冲区HeapFree(hHeap,HEAP_ZERO_MEMORY,pName); }DragFinish(hDropInfo); //拖放结束后,释放内存CView::OnDropFiles(hDropInfo);}---- 到此就完成了文件拖放到view中的listbox,你可以编译、运行了。
mfc文件相对路径
MFC文件相对路径在计算机编程中,路径是用于定位文件或目录的地址。
相对路径和绝对路径是两种常见的路径表示方式。
在MFC应用程序中,相对路径的使用尤为常见。
以下是关于MFC文件相对路径的一些关键点。
一、当前工作目录当前工作目录是指在启动程序或打开文件时所在的目录。
在MFC中,可以使用CWD函数获取当前工作目录的路径。
相对路径是基于当前工作目录来定位文件的,因此了解并正确设置当前工作目录至关重要。
二、启动目录启动目录是指程序启动时所在的目录,通常也就是程序的安装目录。
在MFC中,可以使用GetStartupInfo函数来获取启动目录的信息。
三、相对路径格式相对路径是以当前工作目录或启动目录为基准,通过相对关系来定位文件或目录的路径。
常见的相对路径格式包括:●相对路径:如"data.txt"表示在当前工作目录下的data.txt文件。
●相对路径(相对于启动目录):如"./data.txt"表示在启动目录下的data.txt文件。
●父目录表示法:如"../"表示上一级目录,"../../"表示上上级目录,以此类推。
四、跨平台兼容性MFC是专为Windows平台设计的,因此在跨平台环境中使用MFC时,需要考虑不同操作系统对于路径的处理方式。
例如,Windows和Unix-like系统(如Linux)在路径分隔符的使用上存在差异(Windows使用反斜杠"",而Unix-like系统使用正斜杠"")。
为了确保跨平台兼容性,可以在代码中使用条件编译来根据不同的操作系统选择合适的路径分隔符。
五、路径拼接当需要定位多个文件或子目录时,需要进行路径拼接。
在MFC中,可以使用字符串操作函数或类(如CString)来进行路径拼接。
拼接时需要注意路径分隔符的使用,确保生成的路径在不同操作系统上都能正常工作。
获取三方进程 路径的方法
获取三方进程路径的方法
获取第三方进程路径的方法有多种,具体方法取决于操作系统和目标进程。
以下是一些常见的方法:
1. 使用任务管理器:在Windows系统中,可以打开任务管理器(Ctrl+Shift+Esc),在“进程”选项卡下找到目标进程,右键单击并选择“打开文件位置”,即可找到该进程的路径。
2. 使用第三方工具:有许多第三方工具可以帮助获取进程路径,如Process Explorer、Process Hacker等。
这些工具可以提供更详细的信息,包括进程的路径、参数等。
3. 使用系统命令:在Windows系统中,可以使用命令行工具来获取进程路径。
例如,使用`tasklist`命令可以列出所有进程的详细信息,包括进程ID和文件路径。
4. 编程获取:可以使用编程语言提供的API来获取进程路径。
例如,在Python中,可以使用`psutil`库来获取进程信息,包括进程路径。
无论使用哪种方法,都需要确保有足够的权限来访问目标进程,并且要注意不要随意修改或删除进程文件,以免造成系统不稳定或数据丢失。
MFC的文件操作
MFC的文件操作1.程序运行路径的获取一.获取带“\\”的运行程序路径TCHAR szFilePath[MAX_PATH+1]={0};GetModuleFileName(NULL,szFilePath,MAX_PATH);(_tcsrchr(szFilePath,_T('\\')))[1]=0;//删除文件名,只获得路径字串CString str_url=szFilePath; //例如str_url==e:\program\Debug\MessageBox(str_url,_T("文件路径"),MB_OKCANCEL|MB_ICONW ARNING);二.获取带“\\”的运行程序路径TCHAR _szPath[MAX_PA TH+1]={0};GetModuleFileName(NULL,_szPath,MAX_PATH);(_tcsrchr(_szPath,_T('\\')))[1]=0;//删除文件名,只获得路径字串CString strPath;for(int n=0;_szPath[n];n++){if(_szPath[n]!=_T('\\')){strPath+=_szPath[n];}else{strPath+=_T("\\\\");}}MessageBox(strPath);//输出==e:\\program\\Debug2.创建和删除文件夹CreateDirectory(_T("D:\\Data_zhouyang"),NULL);//在D盘创建文件夹RemoveDirectory(_T("D:\\Data_zhouyang")); //删除文件夹3.C语言对文件的操作CString Path= _T("D:\\DATA\\MyData.xls"); //文件路径FILE *fp_xls;USES_CONVERSION;char * pca = W2A( Path ); //CString转Char *fp_xls=fopen(pca,"w"); //打开文件fprintf(fp_xls,"%d\n",(int)ADC_Data); //写数据到文件fclose(fp_xls); //关闭文件4.CFile类对文件的操作CFile file;file.Open( L"C://DATA_zhouyang111.txt",CFile::modeCreate|CFile::modeWrite,NULL);file.Write("ZHOUYang",strlen("ZHOUYang"));file.Flush();file.Close();说明:其中L 是为了单字符和双字符间的转化5.CFile与CArchive的串行化CString strTemp;CFile mFile;mFile.Open(L"d:\\try.txt",CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite);CArchive ar(&mFile,CArchive::store);ar<<ClientData;ar.Close();mFile.Close();6.CStdioFile的使用CStdioFile mFile;CFileException mExcept;mFile.Open( "d:\\temp\\aa.bat", CFile::modeWrite, &mExcept);CString string="I am a string.";mFile.WriteString(string);mFile.Close();7.文件的查找当对一个文件操作时,如果不知道该文件是否存在,就要首先进行查找。
MFC获取程序目录路径方法
此函数得到当前应用程序的运行目录,还包括应用程序的文件名。 参数说明
hModule:要获取文件名的模块名柄,可以是运用LoadLiberary得到的句柄,null表示当前模 块
MFC获得当前应用程序目录的GetCurrentDirectory()和GetModuleFileName()函数, GetCurrentDirectory只是返回当前进程的当前目录,而并不是进程的镜像文件(.exe)所在的目 录,GetCurrentDirectory()适用于XP等系统,,在WinCE上不能使用,GetModuleFileName() 适用于WinCE2.0以后. 函数说明:
GetModuleFileName函数
WINAPI DWORD GetModuleFileName( HMODULE hModule, LPWSTR lpFilename, DWORD nSize );
GetBuffer和ReleaseBuffer是一套需要配合使用的函数, 与GetBufferSetLength相比, 优点是 如果分配的空间大于实际保存的字符串(0结尾),ReleaseBuffer会把多余申请的空间释放, 归还 给系统。
lpFileName:输出参数,存放取得的文件名 nSize:lpFileName参数的长度
DWORD GetCurrentDirectory( DWORD nBufferLength, // size of directห้องสมุดไป่ตู้ry buffer LPTSTR lpBuffer // directory buffer ); 函数功能 找到当前进程的当前目录 参数说明 nBufferLength:lpBuffer缓冲区的长度 lpBuffer:指定一个预定义字串,用于装载当前目录 返回值 调用成功 返回装载到lpBuffer的字节数。
c#winform获取当前程序运行根目录,winform打开程序运行的文件夹
c#winform获取当前程序运行根目录 ,winform打开程序运行的文 件夹
// 获取程序的基目录。 System.AppDomain.CurrentDomain.BaseDirectory // 获取模块的完整路径。 System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName // 获取和设置当前目录(该进程从中启动的目录)的完全限定目录。 System.Environment.CurrentDirectory // 获取应用程序的当前工作目录。 System.IO.Directory.GetCurrentDirectory() // 获取和设置包括该应用程序的目录的名称。 System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase // 获取启动了应用程序的可执行文件的路径。 System.Windows.Forms.Application.StartupPath // 获取启动了应用程序的可执行文件的路径及文件名 System.Windows.Forms.Application.ExecutablePath
string path = System.IO.Directory.GetCurrentDirectory(); MessageBox.Show("生成完毕!文件;
mfc 路径去除文件名
mfc 路径去除文件名
在MFC(Microsoft Foundation Classes)中,如果你想要获取一个路径但不包括文件名,你可以使用CFileFind类或者PathRemoveFileSpec函数。
以下是如何使用这两个方法的例子。
1. 使用CFileFind类:
```cpp
CString path = "C:\\example\\folder\\file.txt";
CFileFind finder;
if (finder.FindFile(path))
{
CString directory;
finder.GetFilePath(directory); // 这将得到整个路径,包括文件名
int pos = directory.ReverseFind('\\');
if (pos != -1)
{
directory = directory.Left(pos); // 这将得到路径,不包括文件名
}
}
```
2. 使用PathRemoveFileSpec函数:
```cpp
CString path = "C:\\example\\folder\\file.txt";
CString directory = PathRemoveFileSpec(path); // 这将得到路径,不包括文件名
```
这两个方法都可以达到你的目标,即获取一个路径但不包括文件名。
选择哪个方法取决于你的具体需求和个人喜好。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如果想获取当前可执行文件的路径可以使用下面的函数,
并通过延伸获取当前路径的其他文件.
在VS2008的MFC单文档程序中测试可以使用.
需要用到Cstring 如果需要其他类型(char,string)之类的,做下适当的修改吧如果需要加载一些文件使用这个方式挺不错的
下面是详细的介绍
声明
static bool m_GetCurAppPath(CString* mmstr,CString parm);
定义
bool m_GetCurAppPath(CString* mmstr,CString parm)
{
//首先得到帮助文件的路径
CString strFullName = AfxGetApp()->m_pszHelpFilePath;
char drive[_MAX_DRIVE];//#include <stdlib.h>
char dir[_MAX_DIR];
_splitpath(strFullName, drive, dir, NULL,NULL);
CString strPath;
strPath.Format("%s%s", drive, dir);
//strPath即为得到的当前运行程序所在目录
strPath += parm;
*mmstr = strPath;
return false;
}
上面这个函数你需要传入两个CStrimg对象
对一个参数,函数会把程序的路径赋值进去
第二个参数,用于把文件名添加到第一个参数(程序路径)后面
示例
假设程序路径是D:\Program Files\test.exe
一.
CString cpath;
m_GetCurAppPath(&cpath,"");
cpath被赋值后的结果是D:\Program Files\
CString cpath;
m_GetCurAppPath(&cpath,"\test\\test\\test.jpg");
cpath被赋值后的结果是D:\Program Files\test\\test\\test.jpg
三
CString test1;
CString test2;
……
CString cpath;
m_GetCurAppPath(&cpath,"");
test1 = cpath+"\test\\test\\test1.jpg";
test2 = cpath+"\test\\test\\test2.jpg";
....。