ACCESSWin32 API文件读写操作

1、文件的创办与开辟

  HANDLE CreateFile(

    LPCTSTR lpFileName, 

    DWORD dwDesiredAccess, 

    DWORD dwShareMode,         

    LPSECURITY_ATTRIBUTES lpSecurityAttributes,

    DWORD dwCreationDisposition, 

    DWORD dwFlagsAndAttributes, 

    HANDLE hTemplateFile        

  );

    lpFileName:指定用于创造或者打开的对象的称;

    dwDesiredAccess:指定对象的顾方式,包括:

      0  –指定对象只是配备查询访问;

      GENERIC_READ 
–指定对象只是读访问,可自从文本被读取数据,并不过活动文件中之指针;

      GENERIC_WRITE 
–指定对象可是写访问,可向文件中形容副数据,并不过活动文件中之指针;

    dwShareMode:指定共享艺术,包括:

      FILE_SHARE_DELETE

      FILE_SHARE_READ

      FILE_SHARE_WRITE

    lpSecurityAttributes:指向一个SECURITY_ATTRIBUTES结构的指针,用来确定返回的句柄是否会被进程所累;

    dwCreationDisposition:指定如何创建文件,包括:

      CREATE_NEW 
–创建一个初文件,如果文件就是,则函数调用失败;

      CREATE_ALWAYS 
–创建一个新文件,如果文件已是,清空该文件现有属性

      OPEN_EXISTING  –打开文件,如果文件未存,则函数调用失败

      OPEN_ALWAYS 
–如果文件是,则打开文件;如果文件未有,则创造一个新文件;

      TRUNCATE_EXISTING 
–打开文件,文件打开时叫截取使得那尺寸为0字节,调用该函数必须用GENERIC_WRITE的访方式来开辟文件;如果文件未有,则函数调用失败;

    dwFlagsAndAttributes:设置文件属性和标志,包括:

      FILE_ATTRIBUTE_ARCHIVE  –该公文是存档文件

      FILE_ATTRIBUTE_HIDDEN  –该公文是隐藏文件

      FILE_ATTRIBUTE_NORMAL  –该公文并未其它性能设置

      FILE_ATTRIBUTE_OFFLINE 
–文件之数就当物理上走至离线存储设备中,不可知立刻下

      FILE_ATTRIBUTE_READONLY  –该公文为就读文件

      FILE_ATTRIBUTE_SYSTEM  –该公文是操作系统文件

      FILE_ATTRIBUTE_TEMPORARY  –该公文举行小储存使用

      FILE_FLAG_WRITE_THROUGH 
–指示系统非经缓存而直白以数据勾勒副磁盘

      FILE_FLAG_OVERLAPPED 
–指示系统初始化该文件对象,以便那些要较长时间才会成功的操作返回ERROR_IO_PENDING标志

      FILE_FLAG_NO_BUFFERING 
–指示系统为不带系统缓冲的办法打开该文件

      FILE_FLAG_RANDOM_ACCESS  –指示该公文是即兴访问方式

      FILE_FLAG_SEQUENTIAL_SCAN  –指示该公文是逐一访问方式

      FILE_FLAG_DELETE_ON_CLOSE 
–指示当该文件的持有词柄都于关后,操作系统将这去该公文

      FILE_FLAG_BACKUP_SEMANTICS 
–表明是也备份或存储操作而开辟或创造该公文之

      FILE_FLAG_POSIX_SEMANTICS 
–表明以依据POSIX规则看该文件

      FILE_FLAG_OPEN_REPARSE_POINT 
–指定此标志禁止NTFS再分析点的更分析作为

      FILE_FLAG_OPEN_NO_RECALL 
–表明尽管请了拖欠公文的数额,但拖欠数额据连续保留在长途存储器中只要未承诺受流传地面存储器

    hTemplateFile:如果打开一个早已生文件,则这参数将于忽略;要要这参数有效要满足:为开创新文件,给该参数传递的文件句柄必须是以GENERIC_READ方式打开的;

2、文件之写入

  BOOL WriteFile(

    HANDLE hFile,                   

    LPCVOID lpBuffer,               

    DWORD nNumberOfBytesToWrite,    

    LPDWORD lpNumberOfBytesWritten,

    LPOVERLAPPED lpOverlapped       

  );

    hFile:指定要描写副数据的文本的句柄

    lpBuffer:指向包含将要写副文件之数的缓冲区的指针

    nNumberOfBytesToWrite:指明要朝着文件被描写副的字节数

    lpNumberOfBytesWritten:用来接实际写副到文件被的字节数

    lpOverlapped:指向OVERLAPPED结构体的指针,这个参数若一旦于作用,须在CreateFile打开文件设置文件属性时添加FILE_FLAG_OVERLAPPED标记,告诉系统要异步地访问这文件,默认情况下是坐共同IO的点子访的

3、文件的读取

  BOOL ReadFile(

    HANDLE hFile,               

    LPVOID lpBuffer,            

    DWORD nNumberOfBytesToRead, 

    LPDWORD lpNumberOfBytesRead,

    LPOVERLAPPED lpOverlapped   

  );

    hFile:指定要读博其数额的公文之句柄

    lpBuffer:指向一个缓冲区的指针,该缓冲区将接从文本中读取的数码

    nNumberOfBytesToRead:指定由文本读取的字节数

    lpNumberOfBytesRead:用来接过实际读到的字节数

    lpOverlapped:指向OVERLAPPED结构体的指针,这个参数若一旦于作用,须在CreateFile打开文件设置文件属性时添加FILE_FLAG_OVERLAPPED标记,告诉系统要异步地访问是文件,默认情况下是坐协同IO的方式访的

 

例:

//定义一个句柄变量
HANDLE hFile;
//创建文件
hFile = CreateFile("1.txt", GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
//接收实际写入的字节数
DWORD dwWrites;
//写入数据
WriteFile(hFile, "hello world!", strlen("hello world!"), &dwWrites, NULL);
//关闭文件句柄
CloseHandle(hFile);

HANDLE hFile;
//打开文件
hFile = CreateFile("1.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
//接收实际读取到的数据
char ch[100];
//接收实际读取到的字节数
DWORD dwReads;
//读取数据
ReadFile(hFile, ch, 100, &dwReads, NULL);
//设置字符串结束字符
ch[dwReads] = 0;
//关闭打开的文件对象的句柄
CloseHandle(hFile);
//显示读取到的数据
MessageBox(ch);

 

相关文章