孙鑫VC++视频学习笔记之12:文件操作

本文详细介绍了C++中文件操作的基本方法,包括文件的读写、文件大小的获取、文本和二进制文件的区别等内容。此外,还介绍了使用Win32 API函数、SDK方法以及文件对话框进行文件操作的方法。

阅读本文前,我们假设您已经:
   1,知道如何创建一个单文档的App Wizard
   2,知道C++ 类、函数重载等简单知识
   3,知道如何给View类或者Doc文档添加成员变量
   4,会用MFC的IDE调试工具最好,那么本文的程序您可以copy去调试
   5,知道如何为某个框架类添加虚函数或消息处理函数
  
  
  1, 指向常量的指针&&指针常量
  
  Char ch[5]=”lisi”;
  Const char * pStr=ch; const char *等同char const *
  Char * const *pStr=ch; 指针是常量,指针不可更改,其内容可更改
  
  2, 读写
  
  文件读取操作
   FILE *pFile=fopen("1.txt","r");
  
   char ch[100]="0"; //数组被赋值为全零
  memset(ch,0,100);//等同于上一句?
  
   //char ch[100]; //如果不把数组赋零,也可以在写入文件中多写一个空字符
   如fwrite("I Love You",1,strlen("I Love You")+1,pFile);
   //memset(ch,0,100); 把数组赋为全零的另一种方法。
   fread(ch,1,100,pFile);
   fflush(pFile);
  
  3, 获取文件大小
  
  fseek(pFile,0,SEEK_END); //把文件指针移到文件末尾
   int n=ftell(pFile); //得到文件长度
  
  rewind(pFile); //把指针移回文件头 fseek(pFile,0,SEEK_BEGIN)
   pbuf=new char[n+1];
   pbuf[n]=0; //文件尾加/0作为文件结束符
   fread(pbuf,1,n,pFile);
  
  4, 文本和二进制方式。读取和写入的保持一致
  文本:写入, 换行(10)è回车--换行(ASCII为13、10)
   读取, 回车--换行(ASCII 13、10)è换行(10)
  
  二进制:将数据在内存中的存储形式原样输出到文件中
  不管是文本文件还是二进制文件,都可以用文本方式或者二进制方式中的任意一种打开
  
  5, 字符和数字
  
  FILE *pFile=fopen("2.txt","w");
  
  int i=98341; //非要使他可用,可增加itoa(i,ch,10);
  fwrite(&i,4,1,pFile);
  
  6, C++中文件操作
  
  需要加头文件#include "fstream.h"
   ofstream os("3.txt");
   os.write("I love you!",strlen("I love you!"));
   os.close();
  
  读文件:
  
   ifstream ifs("3.txt",ios::in);
   char ch[100]="0";
  memset(ch,0,100)
   ifs.read(ch,100);
   ifs.close();
  
  //循环读取文件每一行
  
  While(!ifs.getline(ch,100).eof())
  
  {//do something with data in buffer ch
  
  }
  下一次重新getline之前,需要 ifs.clear()清除eof标志
  
  7, Win32API函数存取文件
  
  (1)写入
  HANDLE hfile;
   hfile=CreateFile("6.txt",GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
   DWORD dwWrites;
   WriteFile(hfile,"I Love You!(5)",strlen("I Love You!(5)"),&dwWrites,NULL);
   CloseHandle(hfile);
  (2)读取
   HANDLE hfile;
   hfile=CreateFile("6.txt",GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
   char ch[100]="0"; //如果只写char ch[dwRead-1];可以在之后用ch[dwRead]=0设结束符
   DWORD dwRead;
   ReadFile(hfile,ch,100,&dwRead,NULL);
  ch[dwRead]=0;
   CloseHandle(hfile);
  
  8, SDK方法
  
  (1)写入:
  
  CFile file("7.txt",CFile::modeCreate | CFile::modeWrite);
   file.Write("I Love You 1000",strlen("I Love You 1000"));
   file.Close();
  
  (2)读取:
  
  CFile file("7.txt",CFile::modeRead);
   char *pBuf;
   DWORD i=file.GetLength();
  
  pBuf=new char[i+1];
   file.Read(pBuf,i);
  
  pBuf[i]=0;
  
   file.Close();
  
  9, 构造文件对话框,存取文件方法
  
  (1)写入:
  
  CFileDialog fileDlg(FALSE);
   fileDlg.m_ofn.lpstrTitle="我的文件保存对话框";
   fileDlg.m_ofn.lpstrFilter="Text Files(*.txt)/0*.txt/0All Files(*.*)/0*.*/0/0";
  //注意lpstrFilter的构造:每个段落后边都要加/0,末尾要加两个/0,括号里的只是显示,实//现在紧跟着的/0后边,此过滤器只为过滤可见文件使用,并不能按所见格式保存。
   fileDlg.m_ofn.lpstrDefExt="txt";
   if(IDOK==fileDlg.DoModal())
   {
   CFile file(fileDlg.GetFileName(),CFile::modeCreate | CFile::modeWrite);
   file.Write("I Love You 1000",strlen("I Love You 1000"));
   file.Close();
   }
  
  (2)读取
  
   CFileDialog fileDlg(TRUE);
   fileDlg.m_ofn.lpstrTitle="我的文件打开对话框";
   fileDlg.m_ofn.lpstrFilter="Text Files(*.txt)/0*.txt/0All Files(*.*)/0*.*/0/0";
   if(IDOK==fileDlg.DoModal())
   {
   CFile file(fileDlg.GetFileName(),CFile::modeRead);
   char *pbuf;
   DWORD i=file.GetLength();
   pbuf=new char[i+1]; //动态建立缓冲区,值得学习
   pbuf[i]=0;
   file.Read(pbuf,i);
   MessageBox(pbuf);
   file.Close();
  
  }
  
  10, 读写配置文件
  
  CXXXApp::InitInstance(){
  
  // 写在SetRegistryKey(_T("Local AppWizard-Generated Applications"));之后(也可以重新设置表项)
  
  ::WriteProfileString("songpeng","sp","song");用来在C:/WINDOWS/win.ini中写入数据。一方面为了兼容十六位程序,另一方面提高程序运行速度
   //在win32中为[HKEY_CURRENT_USER]è[Software]è[Local Appwizard-Generated Applications]è[File]
  
   CString str;
   ::GetProfileString("songpeng","sp","peng",str.GetBuffer(100),100);
  
  }
  
  11, 读写注册表
  
   读写配置文件的函数WriteProfileString(),GetProfileString()在win32下自动成为注册表的读写。
  
   SetRegistryKey(_T("Local AppWizard-Generated Applications"));用来在注册表的HKEY_CURRENT_USER->Software下增加主键Local AppWizard-Generated Applications
  子键及值由WriteProfileString("songpeng","sp","song");增加
  
   (1)写入注册表:
  
   HKEY hkey;
   RegCreateKey(HKEY_LOCAL_MACHINE,"Software//MyItem//Name",&hkey); RegSetValue(hkey,NULL,REG_SZ,"song",strlen("song"));
   RegSetValueEx(hKey,”age”,0,REG_DWORD,(CONST BYTE*)&dwAge,4);
  
   RegCloseKey(hkey);
  
   (2)读取注册表
  
   注意要先获取字段大小
  
   LONG lValue;
   RegQueryValue(HKEY_LOCAL_MACHINE,"Software//MyItem//Name",NULL,&lValue);
   char *buf=new char[lValue]; //注意建立缓冲区方法
   RegQueryValue(HKEY_LOCAL_MACHINE,"Software// MyItem//Name",buf,&lValue);
  
  LONG RegQueryValue(
   HKEY hKey, // handle to key to query
   LPCTSTR lpSubKey, // name of subkey to query
   LPTSTR lpValue, // buffer for returned string
   PLONG lpcbValue // receives size of returned string
  );
  If lpValue is NULL, and lpcbValue is non-NULL, the function returns ERROR_SUCCESS, and stores the size of the data, in bytes, in the variable pointed to by lpcbValue. This lets an application determine the best way to allocate a buffer for the value's data. 所以,我们要调用两次RegQueryValue,第一次查询键值长度,第二次获得键值
  
  
  
  HKEY hkey;
   RegOpenKey(HKEY_LOCAL_MACHINE, "Software//MyItem//Name",&hkey);
   //打开主键
   DWORD dwType;
   DWORD dwAge;
   DWORD dwValue;
   RegQueryValueEx(hkey,"age",0,&dwType,(LPBYTE)&dwAge,&dwValue);
  
  其他函数:
  
   RegDeleteKey(); RegDeleteValue();等

本 PPT 介绍了制药厂房中供配电系统的总体概念与设计要点,内容包括: 洁净厂房的特点及其对供配电系统的特殊要求; 供配电设计的一般原则与依据的国家/行业标准; 从上级电网到工厂变电所、终端配电的总体结构与模块化设计思路; 供配电范围:动力配电、照明、通讯、接地、防雷与消防等; 动力配电中电压等级、接地系统形式(如 TN-S)、负荷等级与可靠性、UPS 配置等; 照明的电源方式、光源选择、安装方式、应急与备用照明要求; 通讯系统、监控系统在生产管理与消防中的作用; 接地与等电位连接、防雷等级与防雷措施; 消防设施及其专用供电(消防泵、排烟风机、消防控制室、应急照明等); 常见高压柜、动力柜、照明箱等配电设备案例及部分设计图纸示意; 公司已完成的典型项目案例。 1. 工程背景与总体框架 所属领域:制药厂房工程的公用工程系统,其中本 PPT 聚焦于供配电系统。 放在整个公用工程中的位置:与给排水、纯化水/注射用水、气体与热力、暖通空调、自动化控制等系统并列。 2. Part 01 供配电概述 2.1 洁净厂房的特点 空间密闭,结构复杂、走向曲折; 单相设备、仪器种类多,工艺设备昂贵、精密; 装修材料与工艺材料种类多,对尘埃、静电等更敏感。 这些特点决定了:供配电系统要安全可靠、减少积尘、便于清洁和维护。 2.2 供配电总则 供配电设计应满足: 可靠、经济、适用; 保障人身与财产安全; 便于安装与维护; 采用技术先进的设备与方案。 2.3 设计依据与规范 引用了大量俄语标准(ГОСТ、СНиП、SanPiN 等)以及国家、行业和地方规范,作为设计的法规基础文件,包括: 电气设备、接线、接地、电气安全; 建筑物电气装置、照明标准; 卫生与安全相关规范等。 3. Part 02 供配电总览 从电源系统整体结构进行总览: 上级:地方电网; 工厂变电所(10kV 配电装置、变压
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值