一次性进群,长期免费索取教程,没有付费教程。

教程列表见微信公众号底部菜单

进微信群回复公众号:微信群;QQ群:460500587


微信公众号:计算机与网络安全

ID:Computer-network

在Windows下文件有很多种,比如图片文件、视频文件、音频文件……除了常见的文件格式外,其实对于管道、邮槽,甚至是设备对象,在Windows下也被当做文件来对待,这样对于我们操作管道、邮槽、设备对象就像操作文件一样简单了。

对于操作任何文件,我们最先的操作是对文件的打开,操作结束时为了释放资源要进行关闭。我们依次学习如何使用这些API函数,然后完成一个简单的小例子。从“文件操作”开始,我们要接触MFC方面的编程,但不会很难,都是一些对界面和控件之类的使用。

一、打开文件

要对文件进行操作,就要首先对文件进行打开操作,文件打开成功会返回一个句柄,然后通过这个句柄对文件进行读写操作。

打开文件的API函数如下定义:

参数说明如下。

(1)lpFileName:要打开或创建的文件名。这里也可以不是文件名,可以是管道名、设备对象名。

(2)dwDesiredAccess:对文件的访问模式,通常是GENERIC_READ和GENERIC_WRITE。

(3)dwShareMode:对文件的共享模式。Windows是多进程的操作系统,在一个文件被访问时,可能会有另一个进程也访问该文件。这时第一个打开该文件的进程就要对其设置一个访问模式,即打开此文件后,其他进程对该文件可以有哪些操作。

(4)lpSecurityAttributes:安全属性,一般为NULL。

(5)dwCreationDisposition:在创建或打开的文件存在或不存在时该函数的处理方式。

(6)dwFlagsAndAttributes:打开或创建文件时的标志和属性。一般是FILE_ATTRIBUTE_NORMAL。

(7)hTemplateFile:文件模板,一般为NULL。

该函数若执行成功,则返回一个文件句柄;若执行失败,则返回INVALID_HANDLE_VALUE。

在对文件使用完毕后,应该对打开的句柄进行关闭以释放资源,关闭句柄的函数如下:

该函数就一个参数,这个参数就是调用CreateFile()函数时的返回值,也就是文件句柄。

二、文件操作

文件操作的种类有4种,分别是“增、删、改、查”。熟悉数据库操作的朋友一定感觉这4种操作是针对数据库的,怎么对于文件的操作也是这4种呢?其实,不单单是对文件的操作,对注册表的操作,对服务的操作,对进程的操作……也都存在着“增、删、改、查”这些操作。还是讨论文件的这4种操作,文件的“增”其实就是“创建”文件,文件的“删”就是“删除”文件,文件的“改”就是对文件的“写”操作,文件的“查”就是对文件的“读”操作。当然了,对于文件的“读操作”分为狭义的和广义的两种。狭义的“读文件”就是读取文件的内容,对于广义的“读文件”来说,可以是读取文件的大小、读取文件的创建时间和修改时间……文件的创建是通过CreateFile()函数来完成的,文件的打开也是通过CreateFile()函数来完成。对于删除文件、写文件、读文件……这些API函数,下面将逐一进行介绍。

删除文件的API函数如下:

该函数的参数就只有一个,而且非常简单,就是要删除的文件的文件名。

文件的读函数如下:

参数说明如下。

(1)hFile:该参数是CreateFile()函数返回的句柄。

(2)lpBuffer:指向一个缓冲区,函数会将从文件中读出的数据保存在该缓冲区中。

(3)nNumberOfBytesToRead:要求读入的字节数,通常情况下是缓冲区的大小。

(4)lpNumberOfBytesRead:该参数是一个指向DWORD类型的变量,用于返回实际读入的字节数。

(5)lpOverlapped:一般设为NULL。

文件的写函数如下:

设置文件指针的函数如下:

参数说明如下。

(1)hFile:CreateFile()函数打开文件的句柄。

(2)lDistanceToMove:指定要移动的距离。

(3)lpDistanceToMoveHigh:一个指向LONG型的指针,其保存一个要移动的距离的高32位。

(4)dwMoveMethod:指定移动的起始位置。

创建目录的函数如下:

参数说明如下。

(1)lpPathName:创建目录的目录名称;

(2)lpSecurityAttributes:一般为NULL。

移除目录的函数如下:

该函数的参数指定要移除的目录的目录名。

关于文件操作的函数就简单介绍这么几个,文件操作是Windows下编程的重要基础,应用非常广泛,希望您能掌握以上介绍的函数。

微信公众号:计算机与网络安全

ID:Computer-network

【推荐书籍】

mfc打开指定路径下指定类型文件_Windows 网络编程:文件操作相关推荐

  1. 使用FileSystemWatcher 实现对指定路径下指定文件的监视

    一.问题描述 我们想要实现实时监测指定路径下的指定文件内容,但是这些文件的更改是没有规律的,如果单独开启一个线程间隔500毫秒去监测读取进行后续的业务处理,这样的话就会存在IO问题和出现多个无效的业务 ...

  2. 删除指定路径下指定天数之前的文件

    @echo off ::演示:删除指定路径下指定天数之前(以文件的最后修改日期为准)的文件. ::如果演示结果无误,把del前面的echo去掉,即可实现真正删除. ::本例需要Win2003/Vist ...

  3. C#中获取指定路径下指定后缀名的所有文件的路径的list

    场景 指定一个路径和后缀名,查找这个路径下所有以此后缀名结尾的文件. 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获 ...

  4. C#中获取指定路径下特定开头和后缀的所有文件

    场景 指定一个文件路径,获取当前路径下所有文件,并筛选出以指定内容开头和结尾的文件. 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 ...

  5. c# 指定打开某个路径下的CMD_这招太厉害了,不用鼠标也可以打开指定文件

    大家好,我是小宽呀! 想必大多数的小伙伴打开某个指定的文件都是通过移动鼠标, 或者在笔记本上的触摸板上移动光标,然后一顿狂点之后进入的吧. 今天给大家分享另一种操作姿势,不用通过移动鼠标或用触摸板也能 ...

  6. 批处理打开指定路径下的所有文件

    需求:批处理打开指定路径下的所有文件 前提:默认各位同学已经熟悉常用的各种批处理命令,本文仅对涉及到的批处理命令做简单的介绍,有需要进一步学习,可查阅网上其它资料.也可通过CMD命令行窗口通过 [命令 ...

  7. python3查找文件中指定字符串_Python3在指定路径下递归定位文件中出现的字符串...

    [本文出自天外归云的博客园] 脚本功能:在指定的路径下递归搜索,找出指定字符串在文件中出现的位置(行信息). 用到的python特性: 代码如下: import os import sys __all ...

  8. Python碎片化学习教程 @19. 在指定路径下创建.txt文件,并写入内容

    代码功能:在指定路径下创建.txt文件,并写入内容 代码如下: file = open("1.txt", "w", encoding="utf8&qu ...

  9. Java向将指定文件(含文件列表)或者指定路径下目录打包成zip格式

    Java向将指定文件(含文件列表)或者指定路径下目录打包成zip格式 运行环境 pom依赖 测试方法 测试效果 运行环境 1.springboot 2.2.x 2.maven 3.5.4 pom依赖 ...

最新文章

  1. angularjs ngRoute的使用简单例子
  2. 非线程安全的HashMap 和 线程安全的ConcurrentHashMap
  3. ACM学习历程—HDU2476 String painter(动态规划)
  4. hadoop高速扫盲帖,从零了解hadoop
  5. Oracle 常用命令举例
  6. 重读《从菜鸟到测试架构师》--黑色的盒子里有什么(中)
  7. 【BZOJ2959】【codevs2002】长跑,维护双联通分量
  8. ORACLE因为字符集不同,进行中文条件查询,查询结果为空
  9. java死锁2_Java面试必问-死锁终极篇(2)
  10. SystemCenter2012SP1实践(0)本系列摘要目录
  11. c#简单注册登录利用缓存存储账号密码_“密码代填”实现单点登录,安全吗?...
  12. 【Camera】手机相机自动对焦的3种方式及原理
  13. 超强总结,用心分享丨大数据超神之路(三):Linux必备知识
  14. 基于 Proteus 的单片机仿真
  15. WebOffice 文档在线编辑
  16. 简单PS CS6抠图技巧
  17. 计算机硬件之间是怎样联系的,计算机硬件系统和软件系统有没有联系
  18. 为什么UUID是唯一的
  19. java存款只能存100_有100万存款,怎么样存银行才是最佳方法呢?
  20. 用老子云的SDK可以做什么?

热门文章

  1. appRTC android studio,如何在android studio模拟器中启用webgl?
  2. java 解析数据包_java - 如何在Java中正确解析TCP数据包? - 堆栈内存溢出
  3. java 反射 动态编译_动态编译java源代码和反射调用问题
  4. linux c语言 utf8读写,关于在C程序中处理UTF-8文本的方法详解
  5. MVC如何在HTML跳页面,请问在mvc网页中,如何跳转到web Form网页?
  6. android加载富文本可点击链接,Android富文本解析器,支持网络图片,图片和链接点击事件...
  7. oracle 12c 备份pdb下数据库
  8. Oracle 10gR2 Psu 相关
  9. RAC中如何更改对外网卡和内部互联网卡的配置、IP及VIP
  10. sql server中select语句需要申请的锁