文件操作编程之文件读写
来源:互联网 发布:淘宝客链接转换php 编辑:程序博客网 时间:2024/05/17 23:12
文件读写
微软提供了强大的文件读写(文件I/O)操作的编程接口,我们可以通过调用API函数的方式来实现文件的读写。一般情况下,文件的读写过程如图所示:
CreateFile函数
该函数的具体定义格式如下:
HANDLE CreateFile( LPCTSTR lpFileName,//指向文件名的指针 DWORD dwDesiredAccess,//访问模式(读/写) DWORD dwShareMode,//共享模式 LPSECURITY_ATTRIBUTES lpSecurityAttributes,//指向安全属性的指针 DWORD dwCreationDisposition,//如何创建 DWORD dwFlagsAndAttributes,//文件属性 HANDLE hTemplateFile//用于复制文件句柄 );
其中各个函数的具体要求如下:
- lpFileName:要打开的文件名称
- dwDesiredAccess:如为 GENERIC_READ 表示允许对设备进行读访问;如为 GENERIC_WRITE 表示允许对设备进行写操作(可组合使用);如为0,表示只允许获取与一个设备有关的信息。
- dwShareMode : 该参数的作用是定义共享模式。其值为0表示不共享;而为FILE_SHARE_READ和/或FILE_SHARE_WRITE表示允许对文件进行共享访问。
- lpSecurityAttributes :指向一个SECURITY_ATTRIBUTES结构的指针,定义了文件的安全特性(如果系统支持)。
- dwCreationDisposition : 指定当文件存在或不存在时的操作,常见的操作有如下5种:
- CREATE_NEW : 创建文件,如文件存在,则会出错。
- CREATE_ALWAYS:创建文件,会改下前一个文件。
- OPEN_EXCITING : 文件必须已经存在,由设备提出要求。
- OPEN_ALWAYS : 如文件不存在,则创建它。
- TRUNCATE_EXCITING : 将现有文件的长度缩短为零。
- dwFlagsAndAttributes :表示新创建文件的属性,文件常见的属性有以下五种:
- FILE_ATTRIBUTE_ARCHIVE:表示归档属性。
- FILE_ATTRIBUTE_NORMAL:默认属性。
- FILE_ATTRIBUTE_HIDDEN : 隐藏文件或目录。
- FILE_ATTRIBUTE_READONLY:文件为只读。
- FILE_ATTRIBUTE_SYSTEM:文件为系统文件。
- hTemplateFile:该参数指向用于存储的文件句柄,如果不为0,则指定一个文件句柄,新文件将从这个文件中复制扩展属性。
如果该函数调用成功,则返回文件句柄。否则返回INVALID_HANDLE_VALUE。
WriteFile/ReadFile函数
在成功调用CreateFile创建文件句柄之后,就返回所打开或创建的文件的句柄,可调用WriteFile函数或者ReadFile函数来读取文件。
这两个文件的具体格式如下:
BOOL WriterFile( HANDLE hFile,//文件句柄 LPCVOID lpBuffer,//数据缓冲区指针 DWORD nNumberOfBytesToWrite,//要写入的字节数 LPDWORD lpNumberOfBytesWritten,//用于保存实际写入字节数的存储区域的指针 LPOVERLAPPED lpOverlapped//结构体指针 );BOOL ReadFile( HANDLE hFile,//文件句柄 LPCVOID lpBuffer,//数据缓冲区指针 DWORD nNumberOfBytesToRead,//要读取的字节数 LPDWORD lpNumberOfBytesRead,//指向保存实际读取字节数的存储区域的指针 LPOVERLAPPED lpOverlapped//结构体指针 );
其中各个函数的具体要求如下:
- hFile:该参数指向要读写的文件句柄,一般由CreateFile函数返回。
- lpBuffer : 指向一个缓冲区,用于存储读写的数据。
- nNumberOfBytesToWrite/Read : 这两个参数是表示要求写入或读取的字节数。
- lpNumberOfBytesWritten/Read : 这两个参数是表示返回实际写入或读取的字节数。
- lpOverlapped :是指向OVERLAPPED结构的指针,设置为NULL即可。
如果读取或写入操作成功,函数就会返回TRUE。在完成文件的读写操作后还需调用Handle函数关闭文件的句柄,以便其他程序对文件进行操作。
下面代码演示了如何在文件末尾写入数据,其具体过程如下:
#include <stdio.h>#include <windows.h>#include <iostream>int main(int argc, char* argv[]){ //调用CreateFile函数以只写方式打开一个文件 HANDLE hFile = CreateFile(argv[1], GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { printf("CreateFile error\n"); return 0; } //调用SetFilePointer函数调整文件指针位置,移动到文件末尾 if (SetFilePointer(hFile, 0, NULL, FILE_END) == -1) { printf("SetFilePointer error\n"); return 0; } char buff[256] = "配置信息"; DWORD dwWrite; //把buff中的内容写入到文件末尾 if(!WriteFile(hFile, &buff, strlen(buff), &dwWrite, NULL)) { printf("WriteFile Error\n"); return 0; } printf("往 %s 中写入数据成功\n",argv[1]); CloseHandle(hFile); return 0;}
其中SetFilePointer函数的作用是设置文件指针的位置。当一个文件被打开时,系统会维护一个文件指针,指向文件的下一个读写操作的位置,所以随着文件的读写,文件指针的位置也会随之移动。
我想要更好更远的月亮
想要未知的疯狂
想要声色的张扬
0 0
- 文件操作编程之文件读写
- PHP文件操作之读写
- Java之文件读写操作
- 文件基本操作之1--读写练习
- IO流之文件读写操作
- Java操作Mongodb之文件读写
- Python3之文件读写操作详解
- IO操作之文件读写(一)
- java文件读写操作之io流
- Android编程之文件操作
- golang编程之文件操作
- windows编程之文件操作
- linux编程之文件操作
- c#编程之文件操作
- linux编程之文件操作
- C文件操作、读写文件 C++文件读写、文件操作
- Unix环境高级编程<一>:文件I-O之读写、偏移操作
- linux编程——I/O操作之文件基本读写
- HDU 1517 A Multiplication Game (博弈论入门题)
- react-native试玩(21)-文本控件
- 。。。。
- 设计模式:简单工厂、工厂方法、抽象工厂之小结与区别
- class not found exception
- 文件操作编程之文件读写
- 采用非常规方法(非gprecoverseg) 恢复greenplum数据库
- react-native试玩(22)-文本输入框
- Java出现No enclosing instance of type E is accessible. Must qualify the allocation with an enclosing
- HDU 1524 A Chess Game (SG函数模板题)
- 对C++中const的总结
- 《编程导论(Java)·11排序》
- 研二:机遇(上)
- 文件操作编程之复制移动删除