《windows程序设计》PPT课件.ppt

上传人:san****019 文档编号:7352973 上传时间:2020-03-20 格式:PPT 页数:51 大小:345.60KB
返回 下载 相关 举报
《windows程序设计》PPT课件.ppt_第1页
第1页 / 共51页
《windows程序设计》PPT课件.ppt_第2页
第2页 / 共51页
《windows程序设计》PPT课件.ppt_第3页
第3页 / 共51页
点击查看更多>>
资源描述
Windows程序设计基础 第六章文件操作和内存映射文件 操作文件是每个应用程序都要做的事情 保存和获取信息方式 磁盘文件和注册表 6 1文件操作 文件的输入输出是操作系统的重要部分 CFile类 读写和管理磁盘文件的类API函数 与底层设备 COM口 设备驱动 交互 创建和读写文件 使用API函数读写文件时 首先使用CreateFile函数创建文件对象 打开文件 调用成功返回文件句柄 然后以此句柄调用ReadFile和WriteFile函数 进行实际的读写操作 最后调用CloseHandle函数关闭不再使用的文件对象句柄 打开和关闭文件 HANDLECreateFile LPCTSTRlpFileName 要创建或打开对象的名称DWORDdwDesAccess 文件存取方式DWORDdwShareMode 共享属性LPSECURITY ATTRIBUTESlpSecurityAttributes 安全DWORDdwCreationDisposition 文件存在或不存在时操作系统采取行动DWORDdwFlagsAndAttributes 新文件的属性HANDLEhTemplateFile 一个文件模板的句柄 lpFileName 是以空值结尾的字符串的指针 包含要创建 打开或截取的文件 管道 通信资源 磁盘设备或控制台的名称 dwDesAccess 指定文件的输出类型 具体见表所示 dwShareMode 确定是否且如何共享这个文件 可以采用下表所示的值 lpSecurityAttributes 是指向SECURITY ATTRIBUTES结构的指针 指定了目录的安全属性 但要求文件系统支持如NTFS的格式 Windows98不支持此属性 在函数调用时应设置为NULL dwCreationDisposition 确定文件存在或不存在时所采取的动作 这个参数必须为下表所示的值之一 dwFlagsAndAttributes 指定文件的属性和标志 该参数的属性值较多 除属性FILE ATTRIBUTE NORMAL外 都可以任意组合 表中列出了较常用的几个 hTemplateFile 用于存取模板文件的句柄 模板文件为正在创建的文件提供扩展属性 返回值如果函数调用成功则返回打开文件的句柄 如果调用前文件已经存在 且dwCreationDisposition参数使用CREATE ALWAYS或OPEN ALWAYS 则返回ERROR ALREADY EXISTS 函数调用失败则返回INVALID HANDLE VALUE 读取 写入 移动和删除文件 在第一次打开文件时 Windows在文件的开头存放一个文件指针 文件指针所指的位置就是下一次读取或写入的地方 随着字节的读取或写入 Windows也相应增加文件指针 应用程序可以利用函数SetFilePointer来移动文件指针的位置 执行读取和写入的函数是ReadFile和WriteFile 这两个函数在文件指针位置处读取和写入指定数量的字节数 并不进行格式化数据 下面对这两个函数分别进行介绍 读取文件 BOOLReadFile HANDLEhFile 文件指针LPVOIDlpBuffer 数据缓冲DWORDnNumberOfBytesToRead 读取的字节数LPDWORDlpNumberOfBytesRead 接收要读取的字节数LPOVERLAPPEDlpOverlapped 覆盖缓冲 读取文件 hFile 是指向要打开文件的指针 lpBuffer 是接收来自文件数据缓冲区的指针 nNumberOfBytesToRead 指从文件中读取的字节数 lpNumberOfBytesRead 用于接收要读取的字节数 lpOverlapped 是指向OVERLAPPED结构的指针 如果hFile所指的文件是用FILE FLAG OVERLAPPED创建的 则需要用到此结构 如果用FILE FLAG OVERLAPPED创建hFile 而且lpOverlapped不为NULL 则读取操作从OVERLAPPED结构所指的偏移量位置处开始 函数ReadFile可能在完成读取操作之前返回 如果未用FILE FLAG OVERLAPPED创建hFile 而且lpOverlapped不为NULL 则函数ReadFile在完成读取前不会返回 写入文件 BOOLWriteFile HANDLEhFile LPCVOIDlpBuffer DWORDnNumberOfBytesToWrite LPDWORDlpNumberOfBytesWritten LPOVERLAPPEDlpOverlapped 此函数将移动文件指针到指定的位置 DWORDSetFilePointer HANDLEhFile 文件句柄LONGlDistanceToMove 要移动距离PLONGlpDistanceToMoveHigh 移动距离高32位 一般NULLDWORDdwMoveMethod 运动模式 移动文件指针 hFile 是指向要打开文件的指针 lDistanceToMove 指移动文件指针的字节数 若为正值则在文件中把指针向前移动 若为负值则向后移动 lpDistanceToMoveHigh 要移动的64位距离的高32位指针 如果此参数值为NULL 则函数只能在小于232 2的文件上使用 如果指定了这个参数 文件的大小最大可为264 2 dwMoveMethod 指定了文件移动的起始点 可以为下表所给出的值之一 返回值如果函数调用成功 则返回文件指针的低32位 如果参数lpDistanceToMoveHigh不为NULL 则返回文件指针的高32位 若函数调用失败则返回0 xFFFFFFFF 在每次调用函数CreateFile之后 在退出作用之前都应调用函数CloseHandle 关闭打开的对象句柄 使前面的函数调用有效 这个函数使得对象句柄失效 并减少对象句柄计数和执行对象保存检查 如果关闭对象的最后一个句柄 则从系统中删除对象 DeleteFile此函数用来删除一个已存在并指定路径的文件 BOOLDeleteFile LPCTSTRlpFileName 参数lpFileName 是一个指向字符串的指针 字符串中存储的是包含具体路径的文件名 返回值如果函数调用成功则返回TRUE 否则返回FALSE 删除文件 BOOLLockFile HANDLEhFile 文件指针DWORDdwFileOffsetLow 加锁的开始位置DWORDdwFileOffsetHigh DWORDnNumberOfBytesToLockLow 加锁区域大小DWORDnNumberOfBytesToLockHigh 解锁函数UnlockFile和它参数一样 锁定文件和解锁 CloseHandle此函数用于关闭目前打开的对象句柄 BOOLCloseHandle HANDLEhObject 参数hObject 对象的句柄 返回值如果函数调用成功则返回TRUE 否则返回FALSE 关闭文件句柄 此函数用于将文件从一处移到另一处 BOOLMoveFile LPCTSTRlpExistingFileName LPCTSTRlpNewFileName 参数lpExistingFileName 为要移动的文件名及其路径 lpNewFileName 是移动目的地的文件名及其路径 返回值如果函数调用成功则返回值为TRUE 否则返回FALSE 移动文件 此函数用于复制一个文件到指定的目录及文件名中 BOOLCopyFile LPCTSTRlpExistingFileName LPCTSTRlpNewFileName BOOLbFailIfExists lpExistingFileName 是已存在的文件名及其路径 lpNewFileName 是要复制的文件名及其路径 bFailIfExists 指定如果存在与参数lpNewFileName同名的文件 该采取的操作 若设置为TRUE 函数调用失败 若设置为FALSE 函数调用成功 覆盖现有文件 如果函数调用成功则返回TRUE 否则返回FALSE 复制文件 此函数用于查找给定路径或默认路径指定的文件 DWORDSearchPath LPCTSTRlpPath 指定查找文件的路径LPCTSTRlpFileName 需查找文件的名称LPCTSTRlpExtension 文件的扩展名DWORDnBufferLength 接受合法路径和文件名的缓冲区的长度LPTSTRlpBuffer 缓冲区指针 包含已找到文件的有效路径和文件名LPTSTR lpFilePart 包含路径中最后一个反斜杠 之后的字符地址 查找文件 返回值如果函数调用成功则返回路径的字符长度 如果返回值大于nBufferLength 则表明容纳路径实际需要的字符长度 如果函数调用不成功则返回零 使用函数FindFirstFile查找与指定查找文件名匹配的第一个文件的目录 此函数除了检查指定路径的主文件夹之外 还检查子目录名称和文件夹 应用程序可以重复调用FindNextFile函数 检索匹配查找文件名的所有文件和目录 FindFirstFile函数此函数用于检查指定路径的主文件夹及其子目录和子文件夹 HANDLEFindFirstFile LPCTSTRlpFileName LPWIN32 FIND DATAlpFindFileDataLPHANDLElpFileAttribute lpFileName 是合法的目录或包含路径的文件名 可以包含通配符 和 但不能超过MAX PATH 在 stdlib h 中定义的最大路径长 的长度 lpFindFileData 是输出参数 为一个指向WIN32 FIND DATA结构的指针 由WIN32 FIND DATA结构中的属性来表示其内容 lpFileAttribute 文件属性 与前类似 返回值如果函数调用成功则返回可供函数FindNextFile和函数FindClose使用的查找句柄 否则返回INVALID HANDLE VALUE 函数FindFirstFile和函数FindNextFile两者组合使用 才能将所要找的文件或目录全部列出来 函数FindNextFile的原型如下 BOOLFindNextFile HANDLEhFindFile LPWIN32 FIND DATAlpFindFileData 其中 第一个参数是由调用函数FindFirstFile返回的查找句柄 第二个参数是输出参数 获取文件信息 DWORDGetFileType HANDLEhFile 返回值 FILE TYPE CHAR字符文件 通常为LPT设备或控制台FILE TYPE DISK磁盘文件FILE TYPE PIPE套接字 一个命名的或未命名的管道FILE TYPE UNKNOW不能识别指定文件 或函数调用失败 获取文件大小 DWORDGetFileSize HANDLEhFile 文件句柄LPDWORDlpFileSizeHigh 用于返回文件长度的高字 可以指定为NULL 这时返回文件大小的低双字 获取和设置文件属性 DWORDGetFileAttributes LPCTSTRlpFileName lpFileName指定了文件或目录的名称 DWORDSetFileAttributes LPCTSTRlpFileName 目标文件名称DWORDdwFileAttributes 要设置的属性值 6 2驱动器和目录 BOOLSetVolumeLabel LPCTSTRlpRootPathName 目标驱动器根目录名称DWORDlpVolumeName 要设置的卷标名称 如果为NULL 则删除卷标 卷标操作 BOOLGetVolumeInformation LPCTSTRlpRootPathName 目标驱动器根目录名称LPCTSTRlpVolumeNameBuffer 驱动器卷标的缓冲区DWORDnVolumeNameSize 缓冲区长度LPDWORDlpVolumeSerialNumber 驱动器序列号LPDWORDlpMaximumComponentLength 文件名最大长度LPDWORDlpFileSystemFlags 驱动器属性信息LPSTRlpFileSystemNameBuffer 返回文件系统名称 FAT等DWORDnFileSystemNameSize 指定文件系统名称长度 UINTGetDriveType LPCTSTRlpRootPathName 获取驱动器类型列表 此函数返回无符号整数 表示驱动器的类型 它可以是表中的返回值之一 获取磁盘剩余空间函数GetDiskFreeSpace该函数用于获得指定磁盘剩余的空间 BOOLGetDiskFreeSpace LPCTSTRlpRootPathName 驱动器根目录名称LPDWORDlpSectorsPerCluster 每簇的扇区数LPDWORDlpBytesPerSector 每个扇区的字节LPDWORDlpNumberOfFreeClusters 空余的簇数LPDWORDlpTotalNumberOfClusters 总共的簇数 格式化驱动器函数SHFormatDrive该函数用于格式化逻辑驱动器 DWORDSHFormatDrive HWNDhwnd 为格式化对话框指定父窗口句柄UINTdrive 驱动器 0代表A盘 1 B 依次UINTfmtID 物理格式标识 SHFMT ID DEFAULTUINToptions 改变对话框的默认选项 0表示默认 SHFMT OPT FULL表示 快速格式化 SHFMT OPT SYSONLY 表示选中 创建一个MS DOS启动盘 创建目录函数CreateDirectory用此函数在程序中创建一个指定路径的目录 BOOLCreateDirectory LPCTSTRlpPathName 文件及其路径字符串LPSECURITY ATTRIBUTESlpSecurityAttributes 目录的安全性 目录操作 BOOLRemoveDirectory LPCTSTRlpPathName 同上 删除目录函数 6 3注册表操作 注册表 操作系统和用户应用程序的设置仓库 注册表可以是存储在磁盘上的静态数据 也可能是一系列由Windows内核负责维护的内存中的数据 注册表的结构 注册表是一个数据库 它的结构同逻辑磁盘类似 键 磁盘目录键值 磁盘文件一个键可以有多个子键和键值 键值用来存储数据 注册表的五个根键 HKEY CLASSES ROOT 可识别扩展名HKEY CURRENT USER 当前用户配置HKEY LOCAL MACHINE 本地机器所有软硬件信息HKEY USERS 所有用户的配置信息HKEY CURRENT CONFIG 当前配置文件 注册表键值存储数据类型 REG DWORD双字节变量 可存数字和布尔型变量REG BINARY二进制数据 可存长度超过32位的数字和原始数据 如加密密码 REG SZ字符串变量 管理注册表 创建子键LONGRegCreatKeyEx HKEYhkey 主键句柄 LPCTSTRlpSubkey 子键名称 DWORDReserved 给0LPCTSTRlpclass 定义一个类名 一般为0 DWORDdwoptions 打开方式 操作方式 REG OPTION LONG VOLATILE永久生效去掉 LONG是临时生效 REGSAMsumdesived 对注册表键值的访问权限 KEY ALL ACCESS全部权限LPSECURITY ATTRIBUTESlpsecurityattbutes NULLPHKEYphkresult 保留当前打开键的作用 键的句柄指针 LPDWORDlpdwdisposition 本次操作的数据存储到该参数里 关闭子键 LONGRegCloseKey HKEYhkey 打开子键LONGRegOpenKeyEx HKEYhKey 已经打开键的句柄LPCTSTRlpSubKey 子键的名称DWORDulOptions 保留REGSAMsamDesired 安全访问标记PHKEYphkResult 指向将要打开键的句柄 LONGRegCreatKeyEx函数删除子键LONGRegDeleteKey HKEYhkey 主键句柄 LPCTSTRlpSubkey 子键名称 键值操作 LONGRegSetValueEx HKEYhKey 键值所在子键句柄LPCTSTRlpValueName 要设置的键值名称DWORDReserved 保留 必须为0DWORDdwType 要设键值数据类型CONSTBYTE lpData 指向包含键值数据的缓冲区DWORDcbData 缓冲区的长度 读取键值数据类型和数据内容 LONGRegQueryValueEx HKEYhKey 子键句柄LPCTSTRlpValueName 键值名称LPDWORDReserved 保留 必须为0LPDWORDLpType 返回键值类型 LPBYTElpData 返回键值的数据内容LPDWRDlpcbData 缓冲区长度 删除键值 LONGRegDeleteValue HKEYhkey 键值所在子键句柄 LPCTSTRlpValueName 要删除键值名称 ATL库 CRegKey类 操作注册表类 CRegKey类 在atlbase h中 打开存在的键值 LONGOpen HKEYhKeyParent LPCTSTRlpszKeyName REGSAMsamDesired KEY READ KEY WRITE 创建或打开存在的键值 LONGCreate HKEYhKeyParent LPCTSTRlpszKeyName LPTSTRlpszClass DWORDdwOptions REGSAMsamDesired KEY READ KEY WRITE LPSECURITY ATTRIBUTESlpSecAttr LPDWORDlpdwDisposition ATL库 CRegKey类 获取指定键值的数据 LONGQueryValue DWORD 内存映射文件和虚拟内存相似 保留一个地址空间区域 在需要时将它提交到物理存储器 内存映射文件 提交到物理存储器上的数据来自磁盘文件 而不是系统页文件 一旦文件被映射 就认为整个文件被加载到了内存中 可以象访问内存一样访问文件内容 6 4内存映射文件 1 直接用内存映射文件来访问磁盘上的数据文件 无需再进行文件的I 0操作 2 用来在多个进程之间共享数据 进程间共享数据有很多种方法 比如发送消息WM COPYDATA 匿名管道等等 但他们的低层都毫无例外的使用到了MappingFile 然而因为WM COPYDATA一定需要使用同步函数SendMessage 所以在实时性方面表现的不是很好 3 系统使用内存映射文件来加载和执行 EXE和 DLL文件 节省系统页文件和缩短启动应用程序时间 6 4内存映射文件 内存映射过程内存映射文件的位置在3G 4G的空间中 这部分是Win32所有进程都看的到并且共享的 自然可以用来传输数据 另外各个进程所共享的DLL等也是映射在这个空间范围 内存映射文件的使用可以分为以下三步 1 CreateFileMapping创建一个文件映射内核对象2 MapViewOfFile将文件数据映射进进程地址空间3 UnmapViewOfFile从进程地址空间解除这个映射 进程间共享内存 内存映射文件的另一个功能进程间共享数据 让不同进程可以共享内存 调用CreateFileMapping创建命名的内存映射对象时 Windows即在物理内存申请一块指定大小的内存区域 返回文件映射对象的句柄hMap 为了访问这个内存区域必须调用MapViewOfFile函数 促使Windows将此内存空间映射到进程的地址空间中 当在其他进程访问这块内存区域时 则必须使用OpenFileMapping函数取得对象句柄hMap 并调用MapViewOfFile函数得到此内存空间的一个映射 这样系统就把同一块内存区域映射到不同进程的地址空间中 从而达到共享内存的目的 6 5文件切割系统 编程思路 结束
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!