河南企业网站优化,地勘网站建设方案,如何学建设网站,大型网站开发方案微软提供了强大的文件读写操作的编程接口#xff0c;所以可以通过调用API函数实现文件的读写操作。这里通过CreateFile函数来实现。 
要对文件进行读写操作#xff0c;首先要调用CreateFile函数打开或者创建文件#xff0c;函数具体格式如下#xff1a; HANDLE CreateFile(…微软提供了强大的文件读写操作的编程接口所以可以通过调用API函数实现文件的读写操作。这里通过CreateFile函数来实现。 
要对文件进行读写操作首先要调用CreateFile函数打开或者创建文件函数具体格式如下 HANDLE CreateFile(LPCTSTR,lpFileName,                        //指向文件名的指针DWORD dwDesiredAccess,                     //访问模式读/写DWORD dwShareMode,                         //共享模式LPSECURITY_ATTRIBUTES lpSecurityAttributes,//指向安全属性的指针DWORD dwCreationDisposition,               //如何让创建DWORD dwFlagAndAttributes,                 //文件属性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_EXISTING文件已经存在 OPEN_ALWAYS如果不存在就创建 TRUNCATE_EXISTING将现有的文件缩短为零长度 
dwFlagAndAttributes表示新创建文件的属性。文件的常见属性有5种 
FILE_ATTRIBUTE_ARCHIVE标记为归档属性 FILE_ATTRIBUTE_NORMAL默认属性 FILE_ATTRIBUTE_HIDDEN隐藏文件或目录 FILE_ATTRIBUTE_READONLY文件为只读 FILE_ATTRIBUTE_SYSTEM文件为系统文件 
hTemplateFile指向用于存储的文件句柄如果不为0则指定一个文件句柄新的文件将从这个文件中复制扩展属性 
如果该函数调用成功返回文件句柄否则返回INVALID_HANDLE_VALUE。该函数的具体调用方式如下  
1以只读的方式打开已存在的文件 HANDLE hFileCreateFile(1.txt,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);2以只写的方式打开已存在的文件 HANDLE hFILECreateFile(1.txt,GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);3创建一个新文件 HANDLE hFILECreateFile(1.txt,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);在成功调用CreateFile函数之后返回所打开的或创建的文件句柄可调用ReadFile或WriteFile函数来读写文件。函数具体格式如下BOOL WriteFile(HANDLE fFile,                  //文件句柄LPCVOID lpBuffer,              //数据缓存区指针DWORD nNumberOfBytesToWrite,   //所要写的字节数LPDWORD lpNumberOfBytesWritten,//用于保存实际写入字节数的存储区的指针LPOVERLAPPED lpOverlapped      //OVERLAPPED结构体指针)BOOL ReadFile(HANDLE fFile,                  //文件句柄LPCVOID lpBuffer,              //数据缓存区指针DWORD nNumberOfBytesToRead,    //所要写的字节数LPDWORD lpNumberOfBytesRead,   //用于保存实际写入字节数的存储区的指针LPOVERLAPPED lpOverlapped      //OVERLAPPED结构体指针)其中各个参数含义如下hFile指向要读写的文件的句柄一般由CreateFile函数返回 
lpBuffer指向一个缓冲区用于存储读写的数据 
nNumberOfBytesToWrite/Read表示要求写入或读取的字节数 
nNumberOfBytesWritten/Read表示返回实际写入或读取的字节数 
lpOverlapped是指向OVERLAPPED结构体的指针设置为NULL即可 
如果读取或写入成功函数返回TRUE。完成文件读写操作后还需要调用CloseHandle函数关闭文件句柄以便其它程序对文件进行操作。 
下面的代码实现了在文件末尾写入数据的过程 #include stdio.h
#include windows.h
int main()
{HANDLE hFILECreateFile(1.txt,GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);if(hFILEINVALID_HANDLE_VALUE){printf(CreateFile error\n);return 0;}if(SetFilePointer(hFILE,0,NULL,FILE_END)-1){printf(SetFilePointer error\n);return 0;}char buff[256]hello;DWORD dwWrite;if(!WriteFile(hFILE,buff,strlen(buff),dwWrite,NULL)){printf(WriteFile error\n);return 0;}printf(write %d.\n,dwWrite);printf(done.\n);CloseHandle(hFILE);return 0;
}其中SetFilePointer函数的作用是设置文件指针位置当一个文件被打开时系统就会为其维护一个文件指针指向文件的下一个读写操作的位置所以随着文件的读写文件指针也会移动。结果如下文件中内容如下 下面的代码介绍了读取文件的过程 #include stdio.h
#include windows.h
int main()
{HANDLE hFileCreateFile(1.txt,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);if(hFileINVALID_HANDLE_VALUE){printf(CreateFile error.\n);return 0;}int file_size0;file_sizeGetFileSize(hFile,NULL);char *buff;buff(char*)malloc(file_size);DWORD dwRead;if(!ReadFile(hFile,buff,file_size,dwRead,NULL)){printf(ReadFile error.\n);return 0;}buff[file_size]\0;printf(content:%s\n,buff);CloseHandle(hFile);return 0;
}结果如下文件读取成功。