浮叶蓝空的博客
分享学习心得,记录学习笔记
文章:
84
访问:
526140
登录
关于
首页
今天是:
2025年09月09日 星期二
类别
PHP(39)
其他笔记(20)
Java(1)
C++(17)
mysql(2)
JavaScript(4)
近期文章
Linux下Cmake引用第三方静态库示例
Linux下使用Cmake构建静态库示例
Ubuntu设置自动挂载硬盘,挂载U盘
压力测试工具Apache JMeter基本使用
使用PHP脚本借助FFmpeg一键合并视频
Shell中的>、1>、2>、2>&1、&>详解
PHP开启多进程实现异步非阻塞并行执行任务
博主推荐
PHP实现文件下载接口
Qt读写注册表,C++读写注册表
PHP动态修改配置文件,存储为文件
MySql常用语法
Powershell远程连接
PHP从字符串中获取需要的内容部分
封装PHP的HTTP请求
VC++程序常用的一些功能
fuyelk
2018年08月18日
4395
# VC++程序常用的一些功能 这篇博客是我在学习C++时的笔记,全部手打,转载请注明地址 更新时间: 2017/9/24 23:40:48 ### VC++6.0快捷键 功能 | 快捷键 -----|------ Build(建立) | F7 Compile(编译) | Ctrl+F7 Execute(编译+链接+运行)|Ctrl+F5 ClassWizard(类向导) |Ctrl+W 剪切一行|Ctrl+L 插入资源(常用Dialog)|Ctrl+R ### VC++开发常见小问题 > VC++打开,VC++出错,VC++打开出错,VC+打开失败,VC++打不开,VC++错误,VC++提示,VC++显示,VC++打开提示,VC++提示错误,VC++故障,VC++6.0 **1.MFC控件不小心关闭了** - 菜单栏旁边空白处右键->控件 **2.不能访问类查看信息文件** - 删除目录中的clw 和ncb文件 **3.安装的vc++6.0无法运行** - 安装完VC++6.0后 - 在桌面上右击VC++6.0图标→属性→快捷方式→打开文件位置 - 找到VC++6.0安装文件夹Bin下的MSDEV.EXE程序 - 将MSDEV名字改为MSDEV1 - 右击改好的MSDEV1→属性→兼容性,勾上“在兼容模式下运行”,选择“window XP (Service Pack 3 )确定 - 右键MSDEV1→发送到→桌面快捷方式 - 把桌面上原来的快捷方式删除,以后就用这个进入VC++6.0 **4.打开VC++工程文件显示“不能访问类查看文件”** - 当打开一个vc++工程时,提示“不能访问类查看信息文件 类查看信息将不可用”, 解决办法:删除掉目录中clw及ncb文件,再打开,就可以了。 **5.VC++不显示类名,类名消失,类视图不显示类名** - 打开工程所在文件夹,把里面的APS,CLW,NCB类型文件删除,再重新打开工程文件就可以了. **6.打开出错:the classwizard database...***.clw不存在,打开ClassWizard失败,打开ClassWizard出错** - 显示***.clw不存在,选择添加,在选择框里选择***这个cpp文件点击OK就行 **7.VC++6.0编写的程序在其他电脑不能运行**`(缺少MFCxx.dll 等等)` - 工程--设置(或者Alt+F7)--常规--Microsoft基础类-使用MFC静态链接库 - 注意:该方法产生文件较大,如果文件未变,将Debug中内容全部删除,重新编译、链接 **8.VC++6.0显示行号** - 下载VC6LineNumberAddin.dll插件(需要注册机) - 使用方法: 1. 将VC6LineNumberAddin.dll拷贝到VC++6.0安装路径的一下位置(D盘为例): D:\Program Files\Microsoft Visual Studio\Common\MSDev98\AddIns 2. 双击VC6LineNumberAddin.reg进行注册 3. 打开VC++6.0 -> tools -> 定制 -> 附加项和宏文件 勾选VCLineNumber Developer Studio add-in - 如果报错!请看,解决办法: ~VC++安装插件失败、安装行号显示失败、添加附件失败、添加附件和宏文件失败~ 1. 以管理员身份运行电脑的命令提示符 2. 输入D: 进入D盘,再输入cd Program Files\Microsoft Visual Studio\Common\MSDev98\AddIns进入该目录 3. 输入regsvr32.exe VC6LineNumberAddin.dll回车 4. 再进入VC++6.0勾选VCLineNumber Developer Studio add-in -------- -------- ### VC++6.0基本操作 1. 为控件关联事件 - ctrl+w 打开ClassWizard,菜单中Message Maps中找到对应控件ID,Message中即为事件 2. 为控件关联变量 - ClassWizard中Member Variables找到对应ID,点击右边add veriables即可关联变量 3. 删除创建的类 - 先在打开项目目录,删除该类的.cpp及.h文件,再到ClassWizard中Add Class,输入相同类名字,及提示已存在,是否修复或者Remove,选择Remove即可 4. 导出做好的界面和功能到另一个项目 - 在ClassView中选择需要导出的类,右键Add to Gallery - 在新工程中选择"Project" - 插入工程到工作空间 - 文件类型选择"全部文件",打开VC++安装路径(例如D:\Program Files\VC++\Microsoft Visual Studio\Common\MSDev98\Gallery),选择刚才导出的文件,即可 5. 新建类一定要以大写C开头,否则类视图不能显示 ### 数据库操作 #### 创建连接数据库的程序准备工作 **1.ODBC驱动** - 使用MySQL数据库:mysql_ODBCx86_x64驱动 - 使用Access数据库:32位2010 ACCESS的ODBC驱动 **2.在头文件stdafx.h中加入** ```C++ #include <afxdb.h> // 支持数据库对象 ``` **3.用ClassWizard为数据库中的每一个表映射一个记录集(添加新类)** 1. Name : CloginSet(自定义,要求大写字母C开头) 2. Base Class : CRecordset 3. ODBC:StudentDB(自定义) 4. Recordset type:Dynaset 5. 选择一个数据库表 - 重复操作2,为每一个表做一个记录集 #### 数据库语法操作 **1.执行SQL语句**的几种方法 * 首先创建记录集,数据库所有字段记录集中必须都有 * Open()之后增加,修改,删除为:AddNew()、Edit()、Delete(); * 增加、修改执行之后需要Update(); * 多条数据使用MoveNext()将记录集下移一条 * 执行SQL语句方法1适用查找:. * m_student.Open(CRecordset::snapshot,strSQL); * 执行方法SQL语句2适用修改: * m_student.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL); ```C++ //实例: CStudent m_student //实例化数据库表的记录集 CString strSQL; //定义存放SQL的变量 int a=1; //--增加: m_student.Open(); //不需执行SQL语句 m_student.AddNew(); //新增 m_student.m_name="张三"; //数据 m_student.Update(); //更新 m_student.Close(); //关闭记录集 //写SQL语句(Format是一个神奇的格式化工具,后面有介绍) strSQL.Fremat("select * from student where name='%s'",a); //--修改 ,只能先查出来,再修改 m_student.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);//找到这一条 m_student.Edit(); //修改 m_student.m_name="张三"; //数据 m_student.Update(); //更新 m_student.Close(); //关闭记录集 //--查询 m_student.Open(CRecordset::snapshot,strSQL);//找到这一条 while(!m_student.IsEof()) //数据非空 { str1=m_student.m_name(); //取值 m_student.MoveNext(); //记录集下移一条 } m_student.Close(); //关闭记录集 //--删除 if(!m_student.IsEof()) //数据非空 { m_student.Open(CRecordset::snapshot,strSQL);//找到这一条 m_student.Delete(); //执行删除 m_student.Close(); //关闭记录集 } //逐条删除 m_student.Open(); //可直接打开打开记录集 m_student.MoveFirst(); //将记录移到第一个 while(!m_student.IsEOF()) //判断数据是否存在 { m_student.Delete(); //删除当前记录 m_student.MoveNext(); //后移记录 } ``` ### 错误捕捉 ```C++ try { ..... } catch(CDBException *e ) { e->ReportError(); return; } ``` ### 抓取网页 ~获取网页内容,访问网站,访问网页~ **实例** ```C++ #include <stdio.h> #include <afxinet.h> int main() { CInternetSession session("HttpClient"); char * url = "http://www.milinger.com"; CHttpFile *pfile = (CHttpFile *)session.OpenURL(url); DWORD dwStatusCode; pfile->QueryInfoStatusCode(dwStatusCode); if(dwStatusCode == HTTP_STATUS_OK) { CString content; CString data; while (pfile->ReadString(data)) { content += data + "\r\n"; } content.TrimRight(); printf(" %s\n ", content); } pfile->Close(); delete pfile; session.Close(); return 0 ; } ``` ### 获取时间 ~使用调用windows系统方法,显示时间,输出时间~ ```C++ #include <iostream> #include <windows.h> //调用系统方法必须 int main( void ) { SYSTEMTIME sys; GetLocalTime( &sys ); printf( "%4d/%02d/%02d %02d:%02d:%02d.%03d 星期%1d\n",sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute, sys.wSecond,sys.wMilliseconds,sys.wDayOfWeek); //获取的时间数据为整型,如需转换为字符串如下 char shijian[100]; sprintf(shijian,"%4d%02d%02d%02d%02d%02d",sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute,sys.wSecond); CString gtime=shijian; return 0; } ``` ### 计时 ~计算程序运行消耗的时间,计算时间~ ```C++ #include "time.h"//获取时间所需特殊头文件 #include <iostream> using namespace std; void main() { double dur; clock_t start,end; start = clock(); for(int i=1;i<=1000;i++) { cout<<i<<"\t"; if(i%10==0) { cout<<endl; } } end = clock(); dur = (double)(end - start); cout<<"用时"<<(dur/CLOCKS_PER_SEC)<<endl; } ``` ### 字符转换 ~整型转字符串,数据类型转换,字符串转换~ **方法一:Format** ```C++ //神奇的Format CString hang; hang.Format("%d",nIndex+1); ``` **方法二:sprintf** ```C++ #include <iostream> void main() { //获取的时间数据为整型,如需转换为字符串如下 int a=80; char b[3]; //定义一个字符型变量 sprintf(b,"%03d",a);//自动补零 printf("%s",b);//输出080 } ``` **方法三:itoa** ```C++ #include <iostream> void main() { //获取的时间数据为整型,如需转换为字符串如下 int a=100; char b[3]; //定义一个字符型变量 itoa(a,b,10); //将a赋值给c,原数据为10进制 printf("%s",b); } ``` ###强制转码 ~乱码,字符,转码,转换,utf8~ ```C++ #include <iostream> void main() { content=UTF8ToGB(content); } CString CShowWeb::UTF8ToGB(const char *str) { CString result; WCHAR *strSrc; LPSTR szRes; //获得临时变量的大小 int i = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0); strSrc = new WCHAR[i+1]; MultiByteToWideChar(CP_UTF8, 0, str, -1, strSrc, i); //获得临时变量的大小 i = WideCharToMultiByte(CP_ACP, 0, strSrc, -1, NULL, 0, NULL, NULL); szRes = new CHAR[i+1]; WideCharToMultiByte(CP_ACP, 0, strSrc, -1, szRes, i, NULL, NULL); result = szRes; delete []strSrc; delete []szRes; return result; } ``` ### 截取片段 >http://blog.csdn.net/boyxiaolong/article/details/6671703 ~拆分字符串,截取字符串,拆解字符串,分解字符串~ **Find():**`返回字符所在位置索引值` ```C++ //例: CStiring content="welcome to visit my website!" int a=content.Find("to");//输出 “to”所在的位置 //显示:8 ``` **Mid():**`从指定位置拆分字符` ```C++ CStiring content="welcome to visit my website!" CString b=content.Mid(8);//从第85位开始截取 //显示:to visit my website! CString b=content.Mid(8,16);//从第8位开始截取到16位 //显示:to visit ``` ### 判断数据是否为空 **IsEOF()** ```C++ //例: if(m_student.IsEOF()) { MessageBox("数据为空","错误提示",MB_ICONEXCLAMATION); } ``` ### 组合框(下拉列表) 组合框关联变量类型为**Combobox** ```C++ //m_combo_student为组合框关联的变量 //将数据反馈到下拉列表上(组合框) //1.无序插入 CString str1="张三"; CString str2="李四"; m_combo_student.AddString(str1); m_combo_student.AddString(str2); //2.有序插入 m_combo_student.InsertString(0,"张三"); m_combo_student.InsertString(1,"李四"); m_combo_student.InsertString(2,"王五"); //控制第一项显示在上面 m_combo_student.SetCurSel(0); //获取用户选择 int i = m_combo_student.GetCurSel();//未选择返回-1 if(i!=-1) { CString str3; m_combo_student.GetLBText(i,str3); } //获取组合框数据数目 m_combo_student.GetCount(); //删除列表数据 int count_a=m_combobox_student.GetCount(); for(int i=0;i<count_a;i++) { m_combobox_student.DeleteString(0); } ``` ### 绘图 ```C++ //在对对话框中先绘制一个静态图片区域 void CStudent::OnDraw() { UpdateData(); int c[5]={50,15,20,5,2}; //绘图数据输入在这里 int num=0; //计算总数 for(int k=0;k<5;k++) num+=c[k]; CRect rectPic; //获取静态图片的控件大小 CWnd*pWnd=this->GetDlgItem(IDC_DRAW); pWnd->GetClientRect(&rectPic); CDC*pDC=pWnd->GetDC(); //获取设备环境指针 //重新填充静态图片区域 CBrush NewBrush; NewBrush.CreateSolidBrush(RGB(255,255,100)); //绘制图片背景颜色 CBrush*pOldBrush=pDC->SelectObject(&NewBrush); pDC->Rectangle(&rectPic); pDC->SelectObject(pOldBrush); //定义柱形条间距 int nDistance=20; //确定每个柱形条宽度 int nWidth=(rectPic.Width()-4*nDistance)/5; //定义五种颜色,用来填充柱形 COLORREF RGBArry[20]={RGB(0,255,0),RGB(128,0,255),RGB(0,0,255),RGB(255,255,0),RGB(255,0,0)}; CRect rect; //定义个矩形,表示柱形条 CString str; //保存每个段的比例 for(int i=0;i<5;i++) { //确定柱形条的位置 rect.left=rectPic.left+i*(nWidth+nDistance); rect.top=rectPic.bottom-rectPic.Height()*c[i]/num; rect.right=rectPic.left+(i+1)*nWidth+i*nDistance; rect.bottom=rectPic.bottom; //创建笔刷,填充图形 CBrush NewBrush; NewBrush.CreateSolidBrush(RGBArry[i]); CBrush*pOldBrush=pDC->SelectObject(&NewBrush); pDC->Rectangle(&rect); pDC->SelectObject(pOldBrush); //输出所占比例 str=""; str.Format("%d",(int)(100.0*c[i]/num)); str=str+"\%"; pDC->TextOut(rect.left+7,rect.top-20,str); } ReleaseDC(pDC); //释放设备环境 } ``` ### 添加GIF **导入PictureEx类** 1. PictureEx.cpp和PictureEx.h可以在网上下载 2. 选择Project - Add To Project - 文件 - 选择PictureEx.cpp和PictureEx.h文件 **插入外部类文件失败解决办法:** >导入类失败、插入类失败、VC++添加项目失败、导入类文件失败、VC++ Add To Project失败、VC++导入类文件失败 - 新建 - 文件 -C++ Source File命名为PictureEx,将PictureEx.cpp文件里面的代码复制进去 - 新建 - 文件 -C/C++ Header File命名为PictureEx,将PictureEx.h文件里面的代码复制进去 -------- 3. 在控件中将图像控件拖进去,修改属性:ID:IDC_STATIC_GIF,类型:矩形 4. 在ClassWizard中为图片关联变量m_gif1,类型Control,变量类别为CStatic 5. 在你的"程序.h" 中添加 ```C++ #include "PictureEx.h"; ``` 将CStatic m_gif 改为 CPictureEx m_gif1 6. 在资源视图里右键”引入“ - 修改菜单中文件类型为“所有文件(.)",找到需要加入的GIF图片 - 引入 - 输入资源类型为“gif” - 确定 - 修改gif的ID为IDR_MYGIF1 7. 在你的程序文件中加入 ```C++ #include “PictureEx.h” ``` 8. 编写显示GIF的代码,在OnInitDialog中或者指定按钮中编写都行 ```C++ if (m_gif1.Load(MAKEINTRESOURCE(IDR_MYGIF1),_T("Gif"))) m_GifPic.Draw(); ``` 9. 暂停GIF ```C++ m_gif1.UnLoad(); ``` ### 列表控件操作 *先为列表框关联变量:m_list_student* #### 设置列表框样式(必须先定义样式) ```C++ DWORD dwExStyle=LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE; m_list_student.ModifyStyle(0,LVS_REPORT|LVS_SINGLESEL|LVS_SHOWSELALWAYS); m_list_student.SetExtendedStyle(dwExStyle); m_list_student.InsertColumn(0,"序号",LVCFMT_CENTER,40,0); m_list_student.InsertColumn(1,"学号",LVCFMT_CENTER,120,0); m_list_student.InsertColumn(2,"姓名",LVCFMT_CENTER,60,0); m_list_student.InsertColumn(3,"性别",LVCFMT_CENTER,50,0); m_list_student.InsertColumn(4,"手机",LVCFMT_CENTER,120,0); ``` #### 添加数据 ```C++ int nIndex = 0; //定义第n条数据,从0开始 LV_ITEM Lv; Lv.mask=LVIF_TEXT; Lv.iItem=nIndex; //行 Lv.iSubItem=0; //列 Lv.pszText=""; m_list_student.InsertItem(&Lv); //在列表视图中插入一行,每行5列 m_list_student.SetItemText(nIndex,0,nIndex+1); m_list_student.SetItemText(nIndex,1,sid); m_list_student.SetItemText(nIndex,2,sName); m_list_student.SetItemText(nIndex,3,Sex); m_list_student.SetItemText(nIndex,4,Phone); UpdateData(false); ``` #### 删除数据 ```C++ m_list_student.DeleteAllItems(); //清空所有数据 ``` #### 点击列表执行操作 - 为列表控件添加NM_Click事件,编辑代码如下: - ```C++ void CDataList::OnClickListToWeb(NMHDR* pNMHDR, LRESULT* pResult) { //获取当前行的索引值 int nItem=m_list_student.GetNextItem(-1,LVNI_SELECTED); if(nItem!=-1) { //获取所选条目的第三项 CString sname=m_list_student.GetItemText(nItem,2); } *pResult = 0; } ``` ### 按钮控制 *为按钮关联Cbutton类型变量如:m_button_show* #### 禁用按钮 ```C++ m_button_show.EnableWindow(false); ``` #### 恢复按钮 ```C++ m_button_show.EnableWindow(true); ``` ### Excel操作 > VC++导入Excel,VC++导出Excel,生成excel,创建Excel #### 必须的头文件 1. StdAfx.h文件中加入 ```C++ #include <afxdb.h> ``` 2. 在代码顶部加 ```C++ #include <afxdb.h> //导入excel需要" ``` #### 导入Excel ```C++ #include <afxdb.h> //导入excel需要" //文件操作对话框 CFileDialog fileDialog( TRUE, //TRUE为打开文件;FALSE为保存文件 "xls", //为缺省的扩展名 "文件", //显示在文件名组合框的,编辑框的文件名,一般可选NULL OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,//对话框风格,一般为OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,即隐藏只读选项和覆盖已有文件前提示。 "Exce 文件(*.xls)|*.xls||"); //下拉列表枢中显示文件类型 fileDialog.m_ofn.lpstrTitle = "导入数据";//对话框标题 if (fileDialog.DoModal() != IDOK) //如果用户选择的不是“OK”,则返回 return; CString excel_path; //获得文件路径名 excel_path = fileDialog.GetPathName(); CDatabase db; //需要在StdAfx.h文件中加入#include <afxdb.h> CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"; // Excel驱动 CString StrSQL; //定义用来存放查询结果的字符串数组 CString arr[4]; StrSQL.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",sDriver, excel_path, excel_path); if(!db.OpenEx(StrSQL,CDatabase::noOdbcDialog)) { MessageBox("打开EXCEL文件失败!","错误",MB_ICONHAND); return; } //打开数据库(EXCEL表) CRecordset pset(&db); m_List_student.DeleteAllItems(); //清空列表框 StrSQL.Format("SELECT sid,sName,Sex,Phone FROM Student order by 学号 DESC") ; // 倒叙查询 pset.Open(CRecordset::forwardOnly,StrSQL,CRecordset::readOnly); while(!pset.IsEOF()) //判断结束了吗 { //字段名必须与表中的相同,结果赋给arr pset.GetFieldValue("sid",arr[0]); pset.GetFieldValue("sName",arr[1]); pset.GetFieldValue("Sex",arr[2]); pset.GetFieldValue("Phone",arr[3]); //假设这里把得到是数据显示到列表控件(简单的表示一下) ... m_list_student.SetItemText(nIndex,0,nIndex+1); m_list_student.SetItemText(nIndex,1,sid); m_list_student.SetItemText(nIndex,2,sName); m_list_student.SetItemText(nIndex,3,Sex); m_list_student.SetItemText(nIndex,4,Phone); ... nIndex++; pset.MoveNext(); //后移记录 } db.Close(); //关闭数据库 MessageBox("Excel数据成功导入系统!","完成",MB_ICONINFORMATION); ``` #### 导出Excel ```C++ #include <afxdb.h> //导入excel需要" CDatabase DB; CString StrDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"; // Excel安装驱动 CString excel_path; CString StrSQL; //文件操作对话框 CFileDialog fileDialog( FALSE, //TRUE为打开文件;FALSE为保存文件 "xls", //为缺省的扩展名 "导出文件", //为显示在文件名组合框的,编辑框的文件名,一般可选NULL OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,//对话框风格,一般OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,隐藏只读选项和覆盖已有文件前提示。 "Excel(*.xls)|*.xls||"); //下拉列表枢中显示文件类型 fileDialog.m_ofn.lpstrTitle="请输入导出Excel文件名";//对话框标题 if(fileDialog.DoModal() != IDOK) return; excel_path = fileDialog.GetPathName(); // 获取要建立的Excel文件名(包含地址) CFileStatus tFileStatus; if(CFile::GetStatus(excel_path,tFileStatus)==TRUE) //如果存在,且继续创建 { TRY { CFile::Remove(excel_path); //尝试删除 } CATCH_ALL(e) { MessageBox("删除原有Excel文件失败!\n请选择新的Excel文件名","错误提示",MB_ICONEXCLAMATION); return ; } END_CATCH_ALL; } try { // 创建进行存取的字符串 StrSQL.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",StrDriver, excel_path, excel_path); // 创建Excel文件,实际上也是创建一个数据库 if( DB.OpenEx(StrSQL,CDatabase::noOdbcDialog) ) { // 创建表头(列名) StrSQL="CREATE TABLE Student(sid TEXT,sName TEXT,sex TEXT,Phone TEXT)"; //执行创建 DB.ExecuteSQL(StrSQL); //假设要插入的是这几条信息 CString m_sid,m_sName,m_Sex,m_Phone; m_sid = "20170101"; m_sName = "诸葛亮"; m_Sex = "男"; m_Phone = "12345678"; //SQL命令,插入值 StrSQL.Format("INSERT INTO Student (sid,sName,Sex,Phone) VALUES ('%s','%s','%s','%s')",m_sid,m_sName,m_Sex,m_Phone); //执行 DB.ExecuteSQL(StrSQL); } } catch(CDBException *e) { e->ReportError(); return; } MessageBox(" 表格导出完成!","完成",MB_ICONASTERISK|MB_ICONINFORMATION); // 关闭数据库 DB.Close(); } ``` ### 文件操作 #### 创建文件 ```c++ #include "fstream" //文件操作必须 using namespace std; //string必须 void main() { //创建目录 system("mkdir D:\\aaa\\bbb"); //定义文件路径 string pp="D:\\aaa\\bbb\\ccc.txt"; //实例化生成文件方法 ofstream mk_file(pp.c_str()); //文件内容 mk_file<<"这里有一段文字"; mk_file.close(); } ``` #### 判断文件存在 ```C++ #include<windows.h> using namespace std; void main() { string f1 = "D:\\aaa\\bbb\\a.txt"; ifstream fin(f1.c_str()); if (!fin) { cout << "文件不存在" << endl; } else { cout << "文件存在" << endl; } } ``` #### 读取文件 ```C++ #include "iostream" //cout必须 #include "fstream" //文件操作必须 #include "string" //getline必须 using namespace std; //string必须 void main() { //定义文件路径 string p="D:\\aaa\\bbb\\ccc.txt"; //打开文件 ifstream in(p.c_str()); //用于接收读取的信息 string str; /**************************** *grtline(a,b) * *从输入了a读取一行到string b * *****************************/ while(getline(in,str)) { cout<<str<<endl; } } ``` #### 合并文件 ```C++ #include "iostream" #include "fstream" //操作文件必须 using namespace std; void main() { //定义文件1的路径 string f1 = "D:\\aaa\\bbb\\a.txt"; //定义文件2的路径 string f2 = "D:\\aaa\\bbb\\b.txt"; //定义文件合并之后新文件的路径 string f3 = "D:\\aaa\\bbb\\c.txt"; //实例化打开文件方法,并指定路径 ifstream in1(f1.c_str()); ifstream in2(f2.c_str()); //实例化创建文件方法,指定路径 ofstream mk_file(f3.c_str()); //创建文件,内容为文件1,换行,文件2 mk_file<<in1.rdbuf()<<endl; mk_file<<in2.rdbuf(); //关闭操作文件方法 in1.close(); in2.close(); mk_file.close(); } ``` #### 复制文件 ```C++ #include "iostream" void main() { //原文件路径 char *f1="D:\\aaa\\bbb\\a.txt"; //目标路径 char *f2="D:\\aaa\\bbb\\b.txt"; //定义合并语句 char str[3]; //合并要执行的语句 sprintf(str,"copy %s,%s",f1,f2); //执行copy system(str); } ``` #### 删除文件 ```C++ #include "iostream" void main() { char *f1="D:\\aaa\\bbb\\a.txt"; char str[3]; //合并要执行的语句 sprintf(str,"del %s",f1); system(str); } ```
下一篇:
解决ThinkPHP首页需要加index.php的问题
0人点赞
fuyelk
这么长时间了
2020-02-16 12:56:10
# 1
登录后评论
友情链接
doywb
2018-2025 Copyright© 米灵尔 浮叶蓝空
豫ICP备15007436号-1
豫公网安备 41152302000146号