Visual C++编程中的文件操作

Visual Studio 2022 C++ 调用matplotlib-cpp 绘图 利用matplotlib-cpp在Visual Studio 2022中绘图 阅读详情

Visual C++编程中的文件操作
作者:燕山大学 聂栋栋
 


各种关于文件的操作在程序设计中十分常见,如果能对这些操作都了如指掌,就可以根据实际情况找到最佳的解决方案,从而可以在较短的时间内编写出高效的代码。本文对Visual C++中有关文件操作进行了全面的介绍,并对在文件操作中经常遇到的一些疑难问题进行了详细分析。

 

  1. 文件的查找

  当对一个文件操作时,如果不知道该文件是否存在,就要首先进行查找。MFC中有一个专门用来进行文件查找的类“CFileFind”,使用它可以方便快捷地进行文件的查找。下面这段代码演示了这个类的最基本使用方法。

CString strFileTitle;
CFileFind finder;
BOOL bWorking = finder.FindFile(“C://windows//sysbkup//*.cab”);
while(bWorking)
{
bWorking=finder.FindNextFile();
strFileTitle=finder.GetFileTitle();
} 

  2. 文件的打开/保存对话框

  让用户选择文件进行打开和存储操作时,就要用到文件打开/保存对话框。MFC的类“CFileDialog”用于实现这种功能。使用“CFileDialog”声明一个对象时,第一个BOOL型参数用于指定文件的打开或保存,当为TRUE时将构造一个文件打开对话框,为FALSE时构造一个文件保存对话框。

  在构造“CFileDialog”对象时,如果在参数中指定了“OFN_ALLOWMULTISELECT”风格,则在此对话框中可以进行多选操作。此时要重点注意为此“CFileDialog”对象的“m_ofn.lpstrFile”分配一块内存,用于存储多选操作所返回的所有文件路径名,如果不进行分配或分配的内存过小就会导致操作失败。下面这段程序演示了文件打开对话框的使用方法。

CFileDialog mFileDlg(TRUE, NULL,NULL, OFN_HIDEREADONLY|OFN_OVER
WRITEPROMPT|OFN_ALLOWMULTISELECT,“All Files (*.*)|*.*| |”, AfxGetMainWnd());
CString str(“ ”, 10000);
mFileDlg.m_ofn.lpstrFile=str.GetBuffer(10000);
str.ReleaseBuffer();
POSITION mPos=mFileDlg.GetStartPosition();
CString pathName(“ ”, 128);
CFileStatus status;
while(mPos!=NULL)
{
pathName=mFileDlg.GetNextPathName(mPos);
CFile::GetStatus(pathName, status);
} 

 

 

  3. 文件的读写

  文件的读写非常重要,下面将重点进行介绍。文件读写最普通的方法是直接使用“CFile”类进行,如文件的读写可以使用下面的方法:

//对文件进行读操作
char sRead[2];
CFile mFile(_T(“user.txt”),CFile::modeRead);
if(mFile.GetLength()<2)
return;
mFile.Read(sRead,2);
mFile.Close();
//对文件进行写操作
CFile mFile(_T(“user.txt”), CFile::modeWrite|CFile::modeCreate);
mFile.Write(sRead,2);
mFile.Flush();
mFile.Close(); 

  虽然这种方法最为基本,但是它使用烦琐,而且功能非常简单。这里推荐的是使用“CArchive”,它的使用方法简单且功能十分强大。首先还是用“CFile”声明一个对象,然后用这个对象的指针做参数声明一个“CArchive”对象,这样就可以非常方便地存储各种复杂的数据类型了。它的使用方法见下例:

//对文件进行写操作
CString strTemp;
CFile mFile;
mFile.Open(“d://dd//try.TRY”,CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite);
CArchive ar(&mFile,CArchive::store);
ar<<strTemp;
ar.Close();
mFile.Close();
//对文件进行读操作
CFile mFile;
if(mFile.Open(“d://dd//try.TRY”,CFile::modeRead)==0)
return;
CArchive ar(&mFile,CArchive::load);
ar>>strTemp;
ar.Close();
mFile.Close(); 

  “CArchive”的“<<”和“>>”操作符用于简单数据类型的读写,对于“CObject”派生类的对象的存取要使用ReadObject()和WriteObject()。使用“CArchive”的ReadClass()和WriteClass()还可以进行类的读写,如:

//存储CAboutDlg类
ar.WriteClass(RUNTIME_CLASS(CAboutDlg));
//读取CAboutDlg类
CRuntimeClass*mRunClass=ar.Read
Class();
//使用CAboutDlg类
CObject* pObject=mRunClass->CreateObject();
((CDialog* )pObject)->DoModal(); 

  虽然VC提供的文档/视结构中的文档也可进行这些操作,但是不容易理解、使用和管理,如果要进行的文件操作只是简单的读写整行的字符串,建议使用“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(); 

  4.临时文件的使用

  正规软件经常用到临时文件,经常可以看到“C:/Windows/Temp”目录下有大量的扩展名为“.tmp”的文件,这些就是程序运行时建立的临时文件。临时文件的使用方法基本与常规文件一样,只是文件名应该调用函数GetTempFileName()获得。它的第一个参数是建立此临时文件的路径,第二个参数是建立临时文件名的前缀,第四个参数用于得到建立的临时文件名。得到此临时文件名以后,就可以用它来建立并操作文件了,如:

char szTempPath[_MAX_PATH],szTempfile[_MAX_PATH];
GetTempPath(_MAX_PATH, szTempPath);
GetTempFileName(szTempPath,_T (“my_”),0,szTempfile);
CFile m_tempFile(szTempfile,CFile:: modeCreate|CFile:: modeWrite);
char m_char=‘a’;
m_tempFile.Write(&m_char,2);
m_tempFile.Close(); 

  5.文件的复制、删除等

  MFC中没有提供直接进行这些操作的功能,因而要使用SDK。SDK中的文件相关函数常用的有CopyFile()、CreateDirectory()、DeleteFile()、MoveFile()。它们的用法很简单,可参考MSDN。

 

Visual C++ 中的ODBC编程 Visual C++ 中的ODBC编程ODBC(Open Database Connectivity,开放式数据库连接),是一种用来在相关或不相关的数据库管理系统(DBMS)中存取数据的标准应用程序接口(API)。本文给出Windows 95 环境下用Visual C++ 进行ODBC 编程的具体方法及技巧。---- 关键字:ODBC,Visual C++,Wind 阅读详情

相关推荐

Visual C++ 桌面通讯录应用程序实战

Visual C++是微软推出的集成开发环境(IDE),它为开发者提供了一个强大的工具,用于创建、编辑、编译、调试和部署Windows平台的应用程序。这个章节将带您了解Visual C++的基础知识,包括它的安装、界面布局以及项目管理等核心功能。MFC,即Microsoft Foundation Classes,是微软公司为简化Windows应用程序开发而提供的一套C++类库。它的出现标志着微软在推动Windows应用程序开发便捷化方面迈出了重要的一步。

weixin_36149538的博客 1248

文件的操作

各种关于文件的操作在程序设计中十分常见,如果能对这些操作都了如指掌,就可以根据实际情况找到最佳的解决方案,从而可以在较短的时间内编写出高效的代码。本文对Visual C++中有关文件操作进行了全面的介绍,并对在文件操作中经常遇到的一些疑难问题进行了详细分析。   1. 文件的查找   当对一个文件操作时,如果不知道该文件是否存在,就要首先进行查找。MFC中有一个专门用来进行文件查找的类“CFile

henry的专栏 1749

Visual C++编程实践与上机操作指导

本文还有配套的精品资源,点击获取 简介:《VC设计与上机指导》是一本全面的Visual C++学习资源,通过PDF格式介绍VC编程的基础知识和高级应用。本书覆盖了从IDE使用、C++基础、MFC入门、GUI设计、面向对象编程、文件操作、异常处理、多线程编程、DLL使用到网络编程等核心内容,并在最后提供了实战案例,以帮助读者将理论知识应用于实际项目开发中。 1. V...

weixin_42610010的博客 1029

【C/C++ 应用开发 检测文件 】详解 C/C++ 中常用的 5 种文件存在检查方式

不再迷茫 && 详解 C/C++ 中常用的 5 种文件存在检查方式

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 4924

Visual C++ 6.0 编程与应用实例教程

动态链接库(Dynamic Link Library,DLL)是一类包含可由多个程序同时使用的代码和数据的库。在Windows操作系统中,DLL作为应用程序模块化的一种形式,允许不同的应用程序共享相同的库代码和资源,从而节省内存空间并提高程序的可维护性。DLL的主要优势包括:代码复用:多个程序可以共享同一个DLL文件,无需在每个程序中重复相同的代码。减少内存占用:当多个程序使用同一DLL时,该DLL仅被加载一次到内存中。模块化设计。

weixin_42186387的博客 1072

Visual C++程序设计中的文件操作.pdf

Visual C++程序设计中的文件操作.pdf 自己收集的资料

C++ - 判断本机文件是否存在的方式总结

C++ - 判断本机文件是否存在的方式总结 由于C++没有像python那样方便的os.path官方库,经常面临着判断一个文件是否在本机上存在都不易用,今天就总结下C++下判断本机文件是否存在的一些方法。 1 通用方法 1.1 使用std::ifstream判断 #include <iostream> #include <fstream> bool Is_File_Exist(const std::string& file_path) { std::ifstream fi

HW140701的博客 5550

Visual C#图像处理程序实例PDF文件,感觉很不错,发到网上同大家分享。

Visual C#图像处理程序实例PDF文件,感觉很不错,发到网上同大家分享。

如何判断读取文件是否存在?【c++】

在C++中可以通过使用标准库中的头文件(从 C++17 开始支持)来判断一个文件是否存在于指定路径下。这个头文件提供了一个名为的函数,它可以检查给定路径下的文件或目录是否存在。

一个爱编程的小女孩....... 643

闲置服务器之代理服务器篇

这台服务器是在阿里云免费白嫖的,天工开物计划,阿里给的300块无门槛优惠券,买了一台新加坡的境外服务器,288,刚刚抵扣完,因为是境外服务器,能够访问一些国内不能访问的网站,所以本文章仅从技术的角度来搭建代理服务器,使用时,请自觉遵守国家相关规定,如有任何违法行为,与本人无任何关系!!!。本文使用tinyproxy来搭建代理服务器。

m0_50281408的博客 2108

SGLang HiCache实战:手把手教你配置KV Cache Offload,让大模型推理成本直降84%

本文详细介绍了SGLang HiCache在KV Cache Offload配置与调优中的实战应用,通过多级存储架构和智能卸载策略,显著降低大模型推理成本达84%。文章涵盖HiCache架构优势、环境配置、高级调优策略及生产环境最佳实践,帮助开发者优化GPU显存使用,提升并发处理能力。

weixin_29044713的博客 467

VC++判断文件或文件夹是否存在

VC++判断文件或文件夹是否存在 在Windows应用项目中,几乎总会需要用到一些文件系统相关的函数,如:判断文件是否存在,判断文件夹是否为空,删除文件夹及其所有子项,计算文件夹的大小,等等。不知为何,Windows并未提供直接的API来完成这些操作,于是,代码江湖上开始创立起各种流派,一片刀光剑影。。。 大道流:GetFileAttributes 大道至简,大道就在你眼前!对于一般的应用来...

leo_888的专栏 1438

vivado下ECO操作-不重新综合实现修改属性并生成.bit

ECO即engineer change order,即工程变更指令,可以对设计做局部小改动并只对改动部分重新布局布线并生成.bit。在一个工程动辄编译几个小时情况下,可以在调试中节省大量时间。比如我们在调试中,需要改变时钟占空比或者相位,需要改变寄存器初值等等,此时用ECO暂时改动,待验证后在重新编译无疑是最有效率的方法。 实现ECO通常有两种方式,一是通过vivado界面完成,另一种方法就是tcl脚本。所有的ECO操作都可以通过tcl操作完成,有的操作用vivado界面无法完成,只能通过tcl。以下主要

4662

C++ 高端编程

1. 文件操作、目录中所有文件提取 https://www.cnblogs.com/ranjiewen/p/5960976.html

mouMshi的专栏 578

基于STC8G1K08A单片机的EC11旋转编码器控制(江科大同款,代码可直接使用)

本文介绍了STC8G系列单片机与EC11旋转编码器的接口实现方案。硬件方面详细说明了EC11编码器的机械结构、电气特性及与单片机的典型连接电路,包括上拉电阻和消抖设计。软件部分重点阐述了状态检测算法,通过状态机和查找表实现方向判断,采用中断方式检测信号变化,并配合定时器进行软件消抖处理。文章还提供了完整的代码实现,包括GPIO初始化、中断服务函数、状态转换逻辑等关键模块,展示了如何通过串口输出验证旋转计数。最后讨论了抗抖动优化、高低速应用场景等实际问题解决方案。该方案在菜单导航、参数调节等场景中具有实用价值

weixin_74013772的博客 324

字节最新开源模型 DA3(Depth Anything 3)使用教程(一)从任意视角恢复视觉空间

本文介绍DepthAnything3(DA3)模型,一种能够从任意视觉输入中预测几何结构的创新解决方案。DA3采用Transformer骨干网络,通过统一的深度光线表示简化学习过程,支持单目/多视角深度估计、姿态估计和3D高斯预测等多项任务。模型系列包含基础版、度量级和单目专用版本,其中嵌套版本DA3NESTED-GIANT-LARGE表现最佳。代码库提供交互界面、CLI工具和多格式导出功能,支持模块化扩展。实验表明DA3在各项任务上超越现有模型,所有训练数据均来自公开学术数据集。

2506_90492529的博客 2550

【C++版】visual studio 2019安装教

也勾上,一般这个模块已经很少用了,因为比较老,用Qt软件写可视化项目的比较多。注:想用visual studio写可视化项目的,把右侧的一个。登录visual studio 官网。打开visual studio,选择。如果想要好一点的编程感觉可以点击工具。如果有疑问可以私信我哦!选择字体和颜色,分别对。选择模块,C++选择。

千禧皓月的博客 6万+

财务数字化——解读美的战略规划之财务组织体系建设【附全文阅读】

本文提出适用于集团企业的财务管控方案,面向财务负责人、HR及战略规划人员。方案整合四种管控模式,结合500强案例,构建"职能定位-架构设计-权责划分-人才发展"体系,涵盖财务五大模块。通过明确总部与事业部权责边界,提供组织架构等实操框架,旨在平衡财务管控与业务支持,提升效率与风控能力,满足集团财务体系规范化建设需求。

cdfunlove的博客 664

【C++】11 Visual Studio 2019 C++安装matplotlib-cpp绘图

使用C++调用matplotlib-cpp绘图

记录专业模型开发、算法程序设计、软件学习笔记、生活日志。 9395

在 AS ABAP 7.40 SP05 里把 HANA 存储过程纳入 ABAP 生命周期:AMDP 实战示例与踩坑笔记

文章摘要:AMDP(ABAP Managed Database Procedures)是SAP推出的框架,用于在ABAP中管理数据库端的存储过程或函数,特别适用于HANA数据库。它通过将数据库语言(如SQLScript)嵌入ABAP方法,实现数据处理逻辑的"下推"(code pushdown),减少应用层与数据库间的数据传输。AMDP适用于需要数据库特有能力或大规模数据处理的场景,但应优先考虑Open SQL或ABAP CDS等更简单的方案。开发时需注意数据库类型检查、参数前缀(:)等语

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 226

【第三方互联】12、支付宝(Alipay)授权第三方登录

我们创建了支付宝开放平台的网页&移动应用,审核通过后,我们需要拿到appid,支付宝公钥,私钥进项开发 一、添加应用信息至项目环境中 我们保存了 appid、应用私钥、支付宝公钥、支付宝回调地址等信息,这里的公钥为支付宝开放平台为我们生成的“支付宝公钥” 二、引入 Maven 依赖 <!-- 支付宝SDK --> <dependency> <g.........

JACKAL 21万+
上一篇: Windows平台下的多线程编程
下一篇: 关于数据类型转换
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值