【转】第十二章 文件操作

阅读本文前,我们假设您已经:
         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();等
 

    欢迎以任何形式转载本文,只要对您有用
    欢迎给我来信 webbery (at) sohu (dot) com (分别用@,.替换at,dot)

    韦伯主页: http://mail.ustc.edu.cn/~bywang(提供此笔记系列相关源程序下载)
    韦伯Blog: http://webbery.tianyablog.com
参考书目和网站: 
    (1)孙鑫VC++视频
    (2)1-6章主要参考: hbyufan的BLog
    (3)11-20章主要参考: songpeng的Blog
【没有网络,安装python包】如何从 PyPI 下载并安装 Plotly 的离线包 在某些情况下,您可能需要在没有互联网连接的环境中安装 Python 包,例如在飞机上、在某些受限制的网络环境中或在需要离线安装的场景下。以下是如何在 PyPI(Python Package Index)下载 Plotly 包并进行离线安装的详细步骤。 阅读详情

相关推荐

人形机器人五大核心零部件技术解析与国产化实况

人形机器人并非简单机械集成,而是物理、能量、感知、决策与执行五层系统毫秒级协同的复杂体。其性能瓶颈往往不在于整机算法,而深植于谐波减速器的刚度稳定性、无框力矩电机的功率密度与温升控制、六维力传感器的动态响应与温漂抑制、运动控制器的实时OS生态及灵巧手的多指协同精度等底层硬件能力。这些部件共同构成整机68.3%的成本,且国产化率差异显著——谐波减速器达72%,而高精度力矩传感器仍受制于日德厂商。本文聚焦‘谐波减速器’和‘六维力传感器’两大热词,从材料工艺、参数定义、失效模式到产线验证,揭示真正卡脖子的技术关卡

weixin_29065959的博客 407

Python文件与异常

文章目录一. 文件的基础知识1. 文件与文件类型(1). 定义(2). 文件名的组成2. 目录与文件路径(1). 目录(2). 路径表示1. 绝对路径2. 相对路径二. 文件的操作1. 文件的打开和关闭2. 文件内容的读取3. 数据的文件写入三. 一维数据的格式化和处理四. 二维数据的格式化和处理五. 异常和异常处理1. 异常的定义2. 异常的处理 一. 文件的基础知识 文件的使用可以大大简化代码并保证输入的正确性。而将文件用于输出时,其最大的优势在于可以将程序结构长期保存 1. 文件与文件类型 (1)

巧克力布丁的博客 1510

高效网络流量回放:使用tcpreplay实现多目标IP的pcap重放

本文详细介绍了如何使用tcpreplay工具高效回放网络流量pcap文件,并实现多目标IP发送。通过tcprewrite编辑报文和并行回放策略,可满足安全测试、负载测试等场景需求。文章涵盖安装、基础回放、核心技巧及性能优化,帮助读者构建真实流量压力测试环境。

weixin_29297127的博客 480

文件管理 —— 文件的逻辑结构

一、无结构文件 二、有结构文件 (1)顺序文件 (2)索引文件 (3)索引顺序文件 索引顺序文件是索引文件和顺序文件思想的结合。索引顺序文件中,同样会为文件建立一张索引表,但不同的是:并不是每个记录对应一个索引表项,而是一组记录对应一个索引表项。 ...

starter_____的博客 726

从Blender舞步到夜空画卷:基于Pix飞控的无人机编队灯光秀全链路开发实践

本文详细介绍了基于Pixhawk飞控的无人机编队灯光秀全链路开发实践。从Blender三维动画设计、QGroundControl地面站二次开发与MAVLink通信桥接,到PX4飞控的OFFBOARD模式路径控制与LED灯光驱动实现,最后通过Gazebo仿真验证并完成真机组装与首飞。文章为无人机爱好者提供了一套完整的、从创意设计到夜空执行的开源解决方案,重点阐述了多机同步与灯光控制的核心技术挑战与应对策略。

zeta9的博客 585

BUCK电路的大信号模型与小信号模型推导

推导开关电源信号模型的核心是将非线性开关过程线性化,常用。如需具体拓扑的推导细节,可进一步说明!

创新改变世界! 1169

操作系统之文件管理

1.文件系统        文件是具有文件名的一组关联信息的集合,通常文件由若干个记录组成。文件系统是操作系统与管理文件有关的软件和数据集合。从用户的角度看,文件系统实现“按名存取”。从系统的角度看,文件系统是对文件存储器的存储空间进行组织、分配负责文件的存储并对存入的文件实施保护、检索的一组软件集合。        文件系统模型可以分为三个层次:底层是对象及其属性(文件、目录和磁盘存储空间)

继续微笑lsj 2395

Notion访问卡顿?一键优化DNS与Hosts提升加载速度

本文针对Notion访问卡顿问题,提供了两种核心优化方案:修改Hosts文件与配置DNS。详细解析了卡顿根源在于网络链路,并手把手指导用户在Windows、Mac、iOS及Android设备上实施优化,旨在通过替换为更优线路,显著提升Notion的页面加载与同步速度。

fff88的博客 1197

第十二章 Python文件操作【转】

12.1 open() open()函数作用是打开文件,返回一个文件对象。 用法格式:open(name[, mode[, buffering[,encoding]]]) -> file object name 文件名 mode 模式,比如以只读方式打开 buffering 缓冲区 encoding 返回数据采用的什么编码,一般utf8或gbk ...

weixin_30545285的博客 136

python 实现一个完整的基于Python的多视角三维重建系统,包含特征提取与匹配、相机位姿估计、三维重建、优化和可视化等功能

本文介绍了一个基于Python的多视角三维重建系统的实现,涵盖了特征提取与匹配、相机位姿估计、三维重建、优化和可视化等功能。首先,系统通过安装必要的库(如OpenCV、NumPy等)并加载图像数据,初始化相机参数。接着,系统使用SIFT、SURF或ORB算法提取图像特征点,并通过FLANN或BF方法进行特征匹配,应用Lowe's ratio test筛选优质匹配。该系统为后续的相机位姿估计和三维重建奠定了基础,能够从多视角图像中恢复三维场景结构。

huanghm88的专栏 618

【Unity】【Photon】Photon Fusion2 的核心Unity组件 NetworkRunner 学习笔记

本文是学习Photon Fusion2 的核心Unity组件 NetworkRunner的学习笔记。

O青草O的博客 Unity和游戏制作知识分享 1271

【第十二章】动态内存管理,文件操作

【第十二章】动态内存管理,文件操作

2501_94098081的博客 2618

那些年我们create generate clock遇到的坑

想必大家对create_generate_clock这个命令熟悉的不能再熟悉了,然而,在真正做实际项目的时候,会出现各式各样的问题,比如在report timing时,generate clock路径不是我们预想的,source latency丢失等等,今天小编就跟大家重点聊聊source latency丢失的情况。clock时,首先我们要对一个项目的时钟结构要比较清晰,同时针对一些复杂的生成时钟,我们也要学会画波形图进行分析;接下来,我们就来看看哪些case会导致source latency丢失。

芯冰乐 136

第十二章 初窥天机之文件操作

当前计算机存在的文件形式多种多样,比如txt,dat,word,xml,json等各式各样的文件形式。这些文件格式都是常见的,并且在将来的编程中经常使用的文件格式。今后我们主要讲解dat和txt文件格式的读写。当然我们现在讲解的都是最简单的文件操作。如果对于程序员见得最多的文件格式恐怕是“.c”文件,“.cpp”文件,“.exe”文件了,下面让我们详细了解一下什么是文件吧! 12.1 文件 什么是文件?文件在程序设计中表示存储在外部介质上数据的集合。外部介质有:硬盘,U盘,光盘等。数据是以文件的形.

易大飞 500

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

第十二章 java流与文件操作 第四讲

第十二章  java流与文件操作  第四讲 四、文件操作-----File类 (1)File类可以用一些方法来操作文件和获取文件的信息包括:更改文件名、删除文件、列出目录下的文件以及文件对象属性的描述信息等。 File的构造方法  public   File(String  pathname);      File f1 = new File(“data.txt”);  publi

orch_joe的专栏 289

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

第十二章 java流与文件操作 第三讲

第十二章  java流与文件操作  第三讲   三   字节流的应用  InputStream  OutputStream       1. 字节流和字符流的区别:     (1)字节流可以操作任何数据,字符流只能操作字符类型的数据(文本信息) (2)字符流使用的是字符数组,字节流使用的是字节数组   2 . OutputStream 输出流的的应用        FileOutpu

orch_joe的专栏 294

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

20110510 Brew工程师培训笔记——第十二章 文件操作

文件操作文件操作主要功能、与文件操作相关的接口、文件操作中的注意事项三部分

create2010的专栏 745

第十二章 4 文件操作

12.4、文件操作 一、文件类File: 文件类(File)提供了一些方法可以用来操作文件和获取文件的信息,包括:更改文件名、删除文件、列出目录的文件以及文件对象属性的描述信息等。 (注意:Java把目录当做一种特殊的文件来处理)。 File类的声明如下: Public

雪狼小记 461

第十二章 输入/输出

第十二章 输入/输出 文件

人品基数大的专栏 931

C++Prime 第十二章

C++Prime 第十二章 练习12.1 b2被销毁,其中元素未被销毁,b1和b2包含4个元素. 练习12.2 class StrBlob { typedef std::vector<std::string>::size_type size_type; StrBlob(); StrBlob(std::initializer_list < std::string> il); size_type size() const { return data->size(); }

weixin_42254068的博客 267

第十二章 Python文件操作

12.1 open()open()函数作用是打开文件,返回一个文件对象。用法格式:open(name[, mode[, buffering[,encoding]]]) -&gt; file objectname 文件名mode 模式,比如以只读方式打开buffering 缓冲区encoding 返回数据采用的什么编码,一般utf8或gbkModeDescriptionr只读,默认w只写,打开前清空...

weixin_33778778的博客 237

go 清空文件内容_Go语言文件操作应用

Go语言文件操作应用文件操作应用一、从一个文件拷贝到另一个文件。packagemainimport("fmt""io""os")funcCopyFile(dstName,srcNamestring)(writeenint64,errerror){src,err:=os.Open(dstName)iferr!=nil...

weixin_39969028的博客 1385

AI辅助学术写作:提升开题报告效率的7个步骤

学术写作是研究过程中的重要环节,尤其是开题报告的撰写往往需要耗费大量时间。随着AI技术的发展,智能辅助工具正在改变这一现状。通过模块化设计和学科适配引擎,AI工具能够自动生成文献矩阵、技术路线图等核心内容,显著提升写作效率。在实际应用中,AI辅助工具特别适合处理格式规范、文献综述等重复性工作,让研究者能够集中精力于创新点论证。数据显示,使用AI模板的研究生平均节省了80%的初稿撰写时间。但需要注意的是,AI生成内容仍需人工校验,特别是在理论阐述、文献引用和创新点等关键部分。合理使用AI辅助工具,可以大幅提升

weixin_34236869的博客 395

第十二章 java流与文件操作 第一讲

第十二章 java流与文件操作 第一讲 在这一章中主要讲的是在面向对象语言中,输入和输出都是通过数据流来实现的。以及在Java中,处理数据流的类主要被放在java .io包中。 第 一 数据流的概念 数据源和数据宿统称为数据源,但是从仔细的方面讲数据源是是指那些能够提供数据的地方,包括键盘、磁盘文件、网络接口等。而数据宿则是接收数据的地方。 正因为数据源的多样性,才有了数据流。 Java...

yaasshole 128
上一篇: 【转】第十一章 图形保存和重绘
下一篇: 【转】第十三章 文档与串行化
clearver
博客等级 码龄17年 119粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值