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





《《windows程序设计》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《windows程序设计》PPT课件.ppt(51页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Windows程序设计基础程序设计基础第六章第六章 文件操作和内存映射文件文件操作和内存映射文件操作文件是每个应用程序都要做的事情。操作文件是每个应用程序都要做的事情。保存和获取信息方式:磁盘文件和注册表保存和获取信息方式:磁盘文件和注册表6.1文件操作文件操作文件的输入输出是操作系统的重要部分。文件的输入输出是操作系统的重要部分。CFile类:读写和管理磁盘文件的类类:读写和管理磁盘文件的类API函数:与底层设备函数:与底层设备(COM口、设备驱动口、设备驱动)交互交互 创建和读写文件创建和读写文件使用使用API函数读写文件时,首先使用函数读写文件时,首先使用CreateFile函数创建文件
2、对象函数创建文件对象(打开文件打开文件),调用成功返回文,调用成功返回文件句柄;然后以此句柄调用件句柄;然后以此句柄调用ReadFile和和WriteFile函数,进行实际的读写操作。最后调函数,进行实际的读写操作。最后调用用CloseHandle函数关闭不再使用的文件对象函数关闭不再使用的文件对象句柄。句柄。打开和关闭文件打开和关闭文件HANDLECreateFile(LPCTSTRlpFileName,/要创建或打开对象的名称要创建或打开对象的名称DWORDdwDesAccess,/文件存取方式文件存取方式DWORDdwShareMode,/共享属性共享属性LPSECURITY_ATTRI
3、BUTESlpSecurityAttributes,/安全安全DWORDdwCreationDisposition,/文件存在或不存在时操作系统采取行动文件存在或不存在时操作系统采取行动DWORDdwFlagsAndAttributes,/新文件的属性新文件的属性HANDLEhTemplateFile);/一个文件模板的句柄一个文件模板的句柄lpFileName:是以空值结尾的字符串的指针,包含要创建、打开或截取的文件、管:是以空值结尾的字符串的指针,包含要创建、打开或截取的文件、管道、通信资源、磁盘设备或控制台的名称。道、通信资源、磁盘设备或控制台的名称。dwDesAccess:指定文件的输
4、出类型,具体见表所示。:指定文件的输出类型,具体见表所示。值值意意义义0允许应用程序查询设备属性,而实际上不访问设备允许应用程序查询设备属性,而实际上不访问设备GENERIC_READ指定读取属性,可以从文件中读取数据,可以移动文件指针指定读取属性,可以从文件中读取数据,可以移动文件指针GENERIC_WRITE指定写入属性,可以向文件中写入数据,可以移动文件指针指定写入属性,可以向文件中写入数据,可以移动文件指针dwShareMode:确定是否且如何共享这个文件,可以采用:确定是否且如何共享这个文件,可以采用下下表所示的值。表所示的值。值值意意义义0禁止文件共享禁止文件共享FILE_SHAR
5、ED_DELETE仅用于仅用于Windows2000中,后续对象打开操作仅限于删除操作中,后续对象打开操作仅限于删除操作FILE_SHARED_READ可以对文件执行其他的打开操作,以进行读取可以对文件执行其他的打开操作,以进行读取FILE_SHARED_WRITE可以对文件执行其他的打开操作,以进行写入可以对文件执行其他的打开操作,以进行写入lpSecurityAttributes:是指向:是指向SECURITY_ATTRIBUTES结构的指针,指定了结构的指针,指定了目录的安全属性,但要求文件系统支持如目录的安全属性,但要求文件系统支持如NTFS的格式。的格式。Windows98不支持此不
6、支持此属性,在函数调用时应设置为属性,在函数调用时应设置为NULL。dwCreationDisposition:确定文件存在或不存在时所采取的动作。:确定文件存在或不存在时所采取的动作。这个参数必须为这个参数必须为下下表所示的值之一。表所示的值之一。值值意意义义CREATE_NEW创建新文件。如文件已存在,函数调用失败创建新文件。如文件已存在,函数调用失败CREATE_ALWAYS创建新文件。如文件已存在,覆盖旧文件创建新文件。如文件已存在,覆盖旧文件OPEN_EXISTING打开文件。如文件已存在,函数调用失败打开文件。如文件已存在,函数调用失败OPEN_ALWAYS打开文件。如文件已存在,
7、函数创建一个文件,其打开文件。如文件已存在,函数创建一个文件,其dwCreationDisposition属性是属性是CREATE_NEWTRUNCATE_EXISTING打开文件。一旦打开,就截断文件,使其大小为零。调用打开文件。一旦打开,就截断文件,使其大小为零。调用过程必须至少用过程必须至少用GENERIC_WRITE权限打开。如果文件已权限打开。如果文件已存在,函数调用失败存在,函数调用失败dwFlagsAndAttributes:指定文件的属性和标志。该参数的属性值较多,除:指定文件的属性和标志。该参数的属性值较多,除属性属性FILE_ATTRIBUTE_NORMAL外,都可以任意组
8、合。表外,都可以任意组合。表中中列出了较常用列出了较常用的几个,的几个,属属性性含含义义FILE_ATTRIBUTE_ARCHIVE文件是存档类型,可用于备份或删除文件是存档类型,可用于备份或删除FILE_ATTRIBUTE_ENCRYPTED文件或目录是加密的。如果指定属性有文件或目录是加密的。如果指定属性有FILE_ATTRIBUTE_SYSTEM,那么此标志没有作用,那么此标志没有作用FILE_ATTRIBUTE_HIDDEN文件是隐藏的文件是隐藏的FILE_ATTRIBUTE_NORMAL文件没有属性,此标志只有在单独使用时才有效文件没有属性,此标志只有在单独使用时才有效FILE_AT
9、TRIBUTE_READONLY文件是只读属性文件是只读属性FILE_ATTRIBUTE_SYSTEM文件为系统文件文件为系统文件hTemplateFile:用于存取模板文件的句柄。模板文件为正在创建的文件提供扩展属性。:用于存取模板文件的句柄。模板文件为正在创建的文件提供扩展属性。返回值返回值如果函数调用成功则返回打开文件的句柄。如果调用前文如果函数调用成功则返回打开文件的句柄。如果调用前文件已经存在,且件已经存在,且dwCreationDisposition参数使用参数使用CREATE_ALWAYS或或OPEN_ALWAYS,则返回,则返回ERROR_ALREADY_EXISTS。函数调用
10、失败则返回。函数调用失败则返回INVALID_HANDLE_VALUE。读取、写入、移动和删除文件读取、写入、移动和删除文件在第一次打开文件时,在第一次打开文件时,Windows在文件的开头存放一个文在文件的开头存放一个文件指针,文件指针所指的位置就是下一次读取或写入的地件指针,文件指针所指的位置就是下一次读取或写入的地方。随着字节的读取或写入,方。随着字节的读取或写入,Windows也相应增加文件指也相应增加文件指针。应用程序可以利用函数针。应用程序可以利用函数SetFilePointer来移动文件指针来移动文件指针的位置。的位置。执行读取和写入的函数是执行读取和写入的函数是ReadFile
11、和和WriteFile。这两个函。这两个函数在文件指针位置处读取和写入指定数量的字节数,并不数在文件指针位置处读取和写入指定数量的字节数,并不进行格式化数据。下面对这两个函数分别进行介绍。进行格式化数据。下面对这两个函数分别进行介绍。读取文件读取文件BOOLReadFile(HANDLEhFile,/文件指针文件指针LPVOIDlpBuffer,/数据缓冲数据缓冲DWORDnNumberOfBytesToRead,/读取的字节数读取的字节数LPDWORDlpNumberOfBytesRead,/接收要读取的字节数接收要读取的字节数LPOVERLAPPEDlpOverlapped/覆盖缓冲覆盖缓
12、冲);读取文件读取文件hFile:是指向要打开文件的指针。:是指向要打开文件的指针。lpBuffer:是接收来自文件数据缓冲区的指针。:是接收来自文件数据缓冲区的指针。nNumberOfBytesToRead:指从文件中读取的字节数。:指从文件中读取的字节数。lpNumberOfBytesRead:用于接收要读取的字节数。:用于接收要读取的字节数。lpOverlapped:是指向:是指向OVERLAPPED结构的指针,如结构的指针,如果果hFile所指的文件是用所指的文件是用FILE_FLAG_OVERLAPPED创创建的,则需要用到此结构。如果用建的,则需要用到此结构。如果用FILE_FLA
13、G_OVERLAPPED创建创建hFile,而且,而且lpOverlapped不为不为NULL,则读取操作从,则读取操作从OVERLAPPED结构所指的偏移量结构所指的偏移量位置处开始,函数位置处开始,函数ReadFile可能在完成读取操作之前返可能在完成读取操作之前返回。如果未用回。如果未用FILE_FLAG_OVERLAPPED创建创建hFile,而且而且lpOverlapped不为不为NULL,则函数,则函数ReadFile在完成读在完成读取前不会返回。取前不会返回。写入文件写入文件BOOLWriteFile(HANDLEhFile,LPCVOIDlpBuffer,DWORDnNumbe
14、rOfBytesToWrite,LPDWORDlpNumberOfBytesWritten,LPOVERLAPPEDlpOverlapped);此函数将移动文件指针到指定的位置。此函数将移动文件指针到指定的位置。DWORDSetFilePointer(HANDLEhFile,/文件句柄文件句柄LONGlDistanceToMove,/要移动距离要移动距离PLONGlpDistanceToMoveHigh,/移动距离高移动距离高32位,一般位,一般NULLDWORDdwMoveMethod);/运动模式运动模式移动文件指针移动文件指针hFile:是指向要打开文件的指针。:是指向要打开文件的指针。
15、lDistanceToMove:指移动文件指针的字节数,若为正值则在文件中把指针向前移动,若:指移动文件指针的字节数,若为正值则在文件中把指针向前移动,若为负值则向后移动。为负值则向后移动。lpDistanceToMoveHigh:要移动的:要移动的64位距离的高位距离的高32位指针。如果此参数值为位指针。如果此参数值为NULL,则,则函数只能在小于函数只能在小于2322的文件上使用。如果指定了这个参数,文件的大小最大可为的文件上使用。如果指定了这个参数,文件的大小最大可为2642。dwMoveMethod:指定了文件移动的起始点,可以为:指定了文件移动的起始点,可以为下下表所给出的值之一。表
16、所给出的值之一。属属性性含含义义FILE_BEGIN起始点为零或文件的开始起始点为零或文件的开始FILE_CURRENT文件指针的当前值为起始点文件指针的当前值为起始点FILE_END当前文件末尾为起始点当前文件末尾为起始点返回值返回值如果函数调用成功,则返回文件指针的低如果函数调用成功,则返回文件指针的低32位。如果参数位。如果参数lpDistanceToMoveHigh不为不为NULL,则返回文件指针的高,则返回文件指针的高32位。若函数调用失败则返回位。若函数调用失败则返回0 xFFFFFFFF。在每次调用函数在每次调用函数CreateFile之后,在退出作用之前都应调用函数之后,在退出
17、作用之前都应调用函数CloseHandle,关闭打开的对,关闭打开的对象句柄,使前面的函数调用有效。这个函数使得对象句柄失效,并减少对象句柄计数和执行象句柄,使前面的函数调用有效。这个函数使得对象句柄失效,并减少对象句柄计数和执行对象保存检查。如果关闭对象的最后一个句柄,则从系统中删除对象。对象保存检查。如果关闭对象的最后一个句柄,则从系统中删除对象。DeleteFile此函数用来删除一个已存在并指定路径的文件。此函数用来删除一个已存在并指定路径的文件。BOOLDeleteFile(LPCTSTRlpFileName);参数参数lpFileName:是一个指向字符串的指针,字符串中存储的是包含
18、具体路径的文件名。:是一个指向字符串的指针,字符串中存储的是包含具体路径的文件名。返回值返回值如果函数调用成功则返回如果函数调用成功则返回TRUE,否则返回,否则返回FALSE。删除文件删除文件BOOLLockFile(HANDLEhFile,/文件指针文件指针DWORDdwFileOffsetLow,/加锁的开始位置加锁的开始位置DWORDdwFileOffsetHigh,DWORDnNumberOfBytesToLockLow,/加锁区域大小加锁区域大小DWORDnNumberOfBytesToLockHigh);解锁函数解锁函数UnlockFile和它参数一样。和它参数一样。锁定文件和解
19、锁锁定文件和解锁CloseHandle此函数用于关闭目前打开的对象句柄。此函数用于关闭目前打开的对象句柄。BOOLCloseHandle(HANDLEhObject);参数参数hObject:对象的句柄。:对象的句柄。返回值返回值如果函数调用成功则返回如果函数调用成功则返回TRUE,否则返回,否则返回FALSE。关闭文件句柄关闭文件句柄此函数用于将文件从一处移到另一处。此函数用于将文件从一处移到另一处。BOOLMoveFile(LPCTSTRlpExistingFileName,LPCTSTRlpNewFileName);参数参数lpExistingFileName:为要移动的文件名及其路径。
20、:为要移动的文件名及其路径。lpNewFileName:是移动目的地的文件名及其路径。:是移动目的地的文件名及其路径。返回值返回值如果函数调用成功则返回值为如果函数调用成功则返回值为TRUE,否则返回,否则返回FALSE。移动文件移动文件此函数用于复制一个文件到指定的目录及文件名中。此函数用于复制一个文件到指定的目录及文件名中。BOOLCopyFile(LPCTSTRlpExistingFileName,LPCTSTRlpNewFileName,BOOLbFailIfExists);lpExistingFileName:是已存在的文件名及其路径。:是已存在的文件名及其路径。lpNewFileN
21、ame:是要复制的文件名及其路径。:是要复制的文件名及其路径。bFailIfExists:指定如果存在与参数:指定如果存在与参数lpNewFileName同名的文件,同名的文件,该采取的操作。若设置为该采取的操作。若设置为TRUE,函数调用失败;若设置为,函数调用失败;若设置为FALSE,函数调用成功,覆盖现有文件。,函数调用成功,覆盖现有文件。如果函数调用成功则返回如果函数调用成功则返回TRUE,否则返回,否则返回FALSE。复制文件复制文件此函数用于查找给定路径或默认路径指定的文件。此函数用于查找给定路径或默认路径指定的文件。DWORDSearchPath(LPCTSTRlpPath,/指
22、定查找文件的路径指定查找文件的路径LPCTSTRlpFileName,/需查找文件的名称需查找文件的名称LPCTSTRlpExtension,/文件的扩展名文件的扩展名DWORDnBufferLength,/接受合法路径和文件名的缓冲区的长度接受合法路径和文件名的缓冲区的长度LPTSTRlpBuffer,/缓冲区指针,包含已找到文件的有效路径和文件名缓冲区指针,包含已找到文件的有效路径和文件名LPTSTR*lpFilePart);/包含路径中最后一个反斜杠包含路径中最后一个反斜杠“”之后的字符地之后的字符地址址查找文件查找文件返回值返回值如果函数调用成功则返回路径的字符长度。如果返回值大于如果
23、函数调用成功则返回路径的字符长度。如果返回值大于nBufferLength,则表明容纳路径实际需要的字符长度。如果函数调用不成功则返回零。则表明容纳路径实际需要的字符长度。如果函数调用不成功则返回零。使用函数使用函数FindFirstFile查找与指定查找文件名匹配的第一个文件的目录。此函查找与指定查找文件名匹配的第一个文件的目录。此函数除了检查指定路径的主文件夹之外,还检查子目录名称和文件夹。应用程序数除了检查指定路径的主文件夹之外,还检查子目录名称和文件夹。应用程序可以重复调用可以重复调用FindNextFile函数,检索匹配查找文件名的所有文件和目录。函数,检索匹配查找文件名的所有文件和
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- windows程序设计 windows 程序设计 PPT 课件

限制150内