zoukankan      html  css  js  c++  java
  • 文件读写操作总结

    一.C-Runtime 函数

    1. _tfopen函数。

    一般用于客户端,只能独享打开的文件,不能以共享的方式打开。

    FILE *fopen(

       const char* filename,

       const char* mode

    );

    FILE *_wfopen(

       const wchar_t* filename,

       const wchar_t* mode

    );

    说明:

    filename:指定文件绝对路径名。

    Mode:指定访问文件的类型

    l  “r”             读文件。如果文件不存在或者不能只找到,返回NULL指针。

    l  “w”           写文件。如果文件存在,覆盖掉所有的内容。如果不存在,创建之。

    l  “a”            添加数据。在文件末尾添加新的数据,如果文件不存在,创建之。EOF标记保持原来的位置。用MS-DOS Type命令的话,只能显示原来的数据,新添加的数据将不会显示出来。

    l  “r+”           打开文件,获得读写权限。文件必须存在。

    l  “w+”         打开文件,获得读写权限。如果文件存在,内容清空。不存在,创建之。

    l  “a+”         添加数据。和”a”一样添加数据,区别是”a+”会更新EOF标记的位置。Type命令可以显示去全部的数据。

    注:以下标记可以和上面的组合来使用~~

    l  t                 文本模式打开文件。

    l  b                二进制模式打开文件。

    l  c                 启用委托模式。如果调用fflush,_flushall文件缓存的数据直接写入文件。

    l  n                重置委托模式,即还原到”no_commit”模式。

    2. _fsopen函数

    可以设置共享模式,一般用于服务器端。


    FILE *_fsopen(

       const char *filename,

       const char *mode,

       int shflag

    );

    FILE *_wfsopen(

       const wchar_t *filename,

       const wchar_t *mode,

       int shflag

    );

    说明:

    filename:指定文件绝对路径名。同fopen

    Mode:指定访问文件的类型. 同fopen

    Shflag:共享模式:

    l  _SH_COMPAT           设置兼容模式(16位应用程序)

    l  _SH_DENYNO           可读写

    l  _SH_DENYRD           不可读,可写。

    l  _SH_DENYRW          不可读写。

    l  _SH_DENYWR          不可写,可读。

    3. fread 函数

    从文件流中读取数据。

    size_t fread(

       void* buffer,

       size_t size,

       size_t count,

       FILE* stream

    );

    说明:

    Buffer:            存储数据的缓冲区。

    Size:                一次读多少个字节。

    Count:               读取次数。

    Stream:                   FILE 结构的指针。

    注:可以用while语句进行循环读取操作,用feof函数判断是否到了文件结尾,ferror函数判断是读取文件错误。

    4. fwrite函数

    写入数据到文件流中。

    size_t fwrite(

       const void* buffer,

       size_t size,

       size_t count,

       FILE* stream

    );

    说明:

    Buffer:            即将写入的数据。

    Size:                一次写入多少个字节。

    Count:               写入次数。

    Stream:                   FILE 结构的指针。

    注:可以用while语句进行循环写入操作。

    5.stat函数和fstat函数

    Stat获得文件属性,此文件不需要打开,fstat获得一个打开的文件的属性。

    int _stat(

       const char *path,

       struct _stat *buffer

    );

    说明:

    path:             文件路径。

    buffer:       获得属性的结构体地址。

    二.Win32函数

    1. CreateFile函数

    HANDLE CreateFile(

      LPCTSTR lpFileName,

      DWORD dwDesiredAccess,

      DWORD dwShareMode,

      LPSECURITY_ATTRIBUTES lpSecurityAttributes,

      DWORD dwCreationDisposition,

      DWORD dwFlagsAndAttributes,

      HANDLE hTemplateFile

    );

    说明:

    lpFileName:            指定文件路径。

    dwDesireAccess:     指定访问权限。

    描述

    0

    查询文件的属性,并不需要访问这个文件(如果大文件,load进来会很慢)

    GENERIC_READ

    指定读权限,可以和GENERIC_WRITE组合成读写权限。

    GENERIC_WRITE

    指定写权限,可以和GENERIC_READ组合成读写权限。

    dwShareMode:         指定共享模式。

    描述

    0

    不共享

    FILE_SHARE_READ

    读共享,可以和FILE_SHARE_WRITE组合成读写共享.

    FILE_SHARE_WRITE

    写共享,可以和FILE_SHARE_READ组合成读写共享。

    lpSecurityAttributes:        安全模式,忽略,设置成NULL

    dwCreationDesposition: 行为设置

    描述

    CREATE_NEW

    创建一个新的文件,如果文件已经存在,创建失败。

    CREATE_ALWAYS

    创建新文件,如果文件存在,覆盖掉老的文件内容和属性。

    OPEN_EXISTING

    打开一个文件,如果文件不存在,函数返回失败。

    OPEN_ALWAYS

    如果文件存在,打开此文件,如果文件不存在,创建新的文件。

    TRUNCATE_EXISTING

    打开一个文件,并将文件内容清空。并且至少指定GENERIC_WRITE 权限。如果文件不存在,函数返回失败。

    dwFlagsAndAttributes:   设置文件的属性

    描述

    FILE_ATTRIBUTE_ARCHIVE

    指定文件将被入档,应用程序用来标记成将被备份和或者将移除的

    FILE_ATTRIBUTE_COMPRESSED

    指定文件或者文件夹为压缩的。

    FILE_ATTRIBUTE_HIDDEN

    指定文件是隐藏的

    FILE_ATTRIBUTE_NORMAL

    正常属性

    FILE_ATTRIBUTE_READONLY

    指定文件是只读的

    FILE_ATTRIBUTE_SYSTEM

    指定文件是系统文件

    FILE_ATTRIBUTE_ROMMODULE

    指定文件是DLL文件

    FILE_ATTRIBUTE_TEMPORARY

    不支持.

    hTemplateFile:                   NULL

    2. ReadFile函数

    读取文件数据。

    BOOL ReadFile(

      HANDLE hFile,

      LPVOID lpBuffer,

      DWORD nNumberOfBytesToRead,

      LPDWORD lpNumberOfBytesRead,

      LPOVERLAPPED lpOverlapped

    );

    hFile:                  文件句柄

    lpBuffer:            接受读取数据的缓冲区

    nNumberOfBytesRead:   读取的字节数

    lpNumberOfBytesRead: 实际读取的字节数

    lpOverLapped: NULL;

    3. WriteFile 写文件

    写入数据到文件中。

    BOOL WriteFile(

      HANDLE hFile,

      LPCVOID lpBuffer,

      DWORD nNumberOfBytesToWrite,

      LPDWORD lpNumberOfBytesWritten,

      LPOVERLAPPED lpOverlapped

    );

    hFile:                  文件句柄

    lpBuffer:            将写入数据的缓冲区

    nNumberOfBytesRead:   写入的字节数

    lpNumberOfBytesRead: 实际写入的字节数

    lpOverLapped: NULL;

  • 相关阅读:
    【转】sublime text 2中Emmet插件8个常用的技巧
    程序猿崛起3——这一次,我用行动说话
    《Effective Java》学习笔记——积累和激励
    程序猿崛起2——互联网时代下的新潮流和新活法
    【非技术】做好属于自己的作品,然后让世界所有人都记住你
    【非技术】实现理想的第一步就是做自己
    【原创】程序猿崛起
    人生苦短,我用python——当我在玩python的时候我玩些什么
    一个新人如何学习在大型系统中添加新功能和Debug
    一个应届毕业生入职30天后的工作总结——作息
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/5088206.html
Copyright © 2011-2022 走看看