zoukankan      html  css  js  c++  java
  • VC中文件操作的几种方式(1,2)

    第6章  使用文件存取对象

    文件可以用来存储一张《清明上河图》,一曲《春江花月夜》,当然也可以存储一部《红楼梦》,文件的内容依赖于应用程序来解释。几乎所有的操作系统都通过文件的界面允许用户保存、管理数据。所以,我们理所当然把文件当做数据存取介质的第一选择。

    6.1  文件操作的几种方式

    操作计算机的人都会接触到文件,文件的操作通常包括文件的读取、修改,有的时候我们还需要对文件进行外部管理,包括文件复制、删除及属性设置等。

    6.1.1  使用CRT函数std::fxxx()

    文件操作可以采用C语言运行时期库来完成,CRT提供的fxxx()函数如表6-1所示。

    6-1  CRT文件操作函数

    函数

    含义

    fopen

    打开指定文件名的文件

    fread

    从文件中读取指定长度的数据

    fwrite

    向文件中写入指定的数据

    fclose

    关闭文件

    feof

    判断是否达到文件结尾

    fgetc

    从文本文件中读取一个字符

    fgets

    从文本文件中读取一个字符串

    fputc

    向文本文件中写入一个字符

    fputs

    向文本文件中写入一个字符串

    当我们打开、创建一个文件时,常常需要调用fopen()函数,该函数的原型为:

    1. FILE *fopen(   
    2.    const char *filename,  
    3.    const char *mode   
    4. ); 

    参数解释

    filename:指定文件的文件名,如test.out。

    mode:指定文件的操作方式,如表6-2所示。

    6-2  fopen文件操作方式

    标志

    含义

    r

    读模式,如果文件不存在则会失败

    w

    写模式,如果文件已存在则会清空其内容

    a

    追加模式,写入的内容追加在原有内容之后,

    如果文件不存在则会自动创建

    r+

    读写模式(文件必须存在)

    w+

    读写模式,如果文件已存在则会清空其内容

    a+

    读+追加模式

    t

    文本方式

    b

    二进制方式

    ccs=ENCODING

    文件编码方式,可指定ENCODING

    UTF-8UTF-16LEUNICODE

    文件的操作方式可以是如上标志的组合,如:r+b。当采用"ccs=ENCODING"时,我们需要在前面添加一个","作为分隔。如我们以读写方式、UNICODE编码打开某个文件:

    1. fopen("newfile.txt""rw, ccs=UNICODE"); 

    如下罗列出使用CRT函数进行文件操作的流程。

    使用fopen()创建、打开文件,返回一个文件指针FILE *;

    以FILE *作为参数,调用fread()、fwrite()等操作函数完成对文件的读写。fread()、fwrite()函数的原型为:

    1. size_t fread(   
    2.    void *buffer,  
    3.    size_t size,  
    4.    size_t count,  
    5.    FILE *stream   
    6. );  
    7.  
    8. size_t fwrite(  
    9.    const void *buffer,  
    10.    size_t size,  
    11.    size_t count,  
    12.    FILE *stream   
    13. ); 

    调用fclose()关闭文件指针。

    使用CRT操作文件流程如图6-1所示。

     
    (点击查看大图)图6-1  使用CRT操作文件的步骤

    6.1.2  使用标准C++库std::fstream

    标准C++操作文件主要是通过文件流fstream来完成的。文件输入/输出流用以实现文件读取和存储的操作,这种基于流的文件操作如图6-2所示。

     
    (点击查看大图)图6-2  文件输入/输出流

    和文件有关系的输入/输出类主要在头文件<fstream>中被定义。在这个头文件中主要定义了3个类。由这3个类控制对文件的各种输入/输出操作,它们分别是ifstream、ofstream、fstream。其中fstream类是由iostream类派生而来的,它们之间的继承关系如图6-3所示。

    如果需要使用fstream,则需要包含<fstream>头文件,与iostream不同的是,fstream需要和指定的文件名相关联,如:
     

    1. ofstream out("test.out");  
    2. out << "hello, world!"
     
    (点击查看大图)图6-3  fstream与iostream

    除流操作符之外,fstream提供的文件操作函数如表6-3所示。

    6-3  fstream文件操作函数

    函数

    含义

    open

    打开文件

    close

    关闭文件

    is_open

    判断当前文件是否已打开

    其中,open()函数具有多个原型:
     

    1. void open(  
    2.     const char *_Filename,  
    3.     ios_base::openmode _Mode = ios_base::in | ios_base::out,  
    4.     int _Prot = (int)ios_base::_Openprot  
    5. );  
    6. void open(  
    7.     const char *_Filename,  
    8.     ios_base::openmode _Mode  
    9. );  
    10. void open(  
    11.     const wchar_t *_Filename,  
    12.     ios_base::openmode _Mode = ios_base::in | ios_base::out,  
    13.     int _Prot = (int)ios_base::_Openprot  
    14. );  
    15. void open(  
    16.     const wchar_t *_Filename,  
    17.     ios_base::openmode _Mode  
    18. ); 

    参数ios_base::openmode用以指定文件的打开方式,可以是如表6-4所示的标志的组合。

    6-4  ios_base::openmode标志

    标志

    含义

    ios::app

    追加模式(append),新输出的内容追加在原文件内容的后面

    ios::ate

    文件打开后定位到文件尾,ios:app就包含此属性

    ios::binary

    以二进制方式打开文件,默认的方式是文本方式

    ios::in

    文件以输入方式打开

    ios::out

    文件以输出方式打开

    ios::trunc

    截断模式(truncate),如果文件存在,则把文件长度设为0

    ios::nocreate

    如果文件不存在则不创建

    ios::noreplace

    如果文件已存在则不替换

    如下罗列出使用fstream类进行文件操作的流程。

    调用fstream::fopen()创建、打开文件。

    通过流操作,使用fstream完成输入/输出,如:out << "hello, world!"。

    调用fstream::close()关闭文件。

    ====未完待续====

    以上摘自《把脉VC++》第4.6.2小节的内容 ,转载请注明出处。

    如果你想与我交流,请点击如下链接加我为好友:http://student.csdn.net/invite.php?u=113292&c=8913f87cffe7d533

  • 相关阅读:
    nopCommerce 2.60 之实现产品规格属性分组筛选
    chromedriver的使用
    linux 服务器发现了挖矿病毒
    C++day11 学习笔记
    C++day08 学习笔记
    C++day10 学习笔记
    C++day07 学习笔记
    C++day06 学习笔记
    C++day04 学习笔记
    C++day02 学习笔记
  • 原文地址:https://www.cnblogs.com/bluejoe/p/5116057.html
Copyright © 2011-2022 走看看