`
isiqi
  • 浏览: 16753486 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

C++中的文件输入/输出(6):一些有用的函数

阅读更多
tellg() ——返回一个int型数值,它表示“内置指针”的当前位置。此函数仅当你在读取一个文件时有效。例如:
#include <fstream.h>

void main()
{
// 假如我们已经在test_file.txt中存有了“Hello”的内容
ifstream File("test_file.txt");

char arr[10];

File.read(arr,10);

// 由于Hello5个字符,因此这里将返回5
cout << File.tellg() << endl;

File.close();
}

tellp() —— tellg()有同样的功能,但它用于写文件时。总而言之:当我们读取一个文件,并要知道内置指针的当前位置时,应该使用tellg();当我们写入一个文件,并要知道内置指针的当前位置时,应该使用tellp(). 由于此函数的用法与tellg()完全一样,我就不给出示例代码了。

seekp() ——
还记得seekg()么?当我在读取一个文件,并想到达文件中某个特定位置时,就曾使用过它。seekp()亦如此,只不过它用于写入一个文件的时候。例如,假如我在进行文件读写,而要定位到当前位置的三个字符之前,则需调用FileHandle.seekg(-3). 但如果我是在写入一个文件,并且比如我要重写后5个字符的内容,我就必须往回跳转5个字符,因而,我应该使用FileHandle.seekp(-5) .

ignore() ——
使用于读取文件之时。如果你想略过一定数量的字符,只需使用此函数。实际上,你也可以使用seekg()来代替,然而使用ignore()有一个优点——你可以指定一个特定“界限规则(delimiter rule)”,同样使得ignore()在指定的位置停下。函数原型如下:

istream& ignore( int nCount, delimiter );

nCount表示要略过的字符数量,而delimiter —— 与它的名称有着同样的含义:假如你想在文件末尾停下,则可使用EOF值传入,这样一来此函数就等同于seekg();但该参数还可以使用其他值,例如‘\n’这样可以在换行的同时定位在新行处。下面是示例:
#include <fstream.h>

void main()
{
// 假设test_file.txt中已经存有"Hello World"这一内容
ifstream File("test_file.txt");

static char arr[10];

// 假如一直没有遇到字符"l",则向前定位直到跳过6个字符
// 而如果期间遇到"l",则停止向前,定位在该处
File.ignore(6,'l');

File.read(arr,10);

cout << arr << endl;
// 它将显示"lo World!"

File.close();

}

getline() ——
虽然前面的章节中我曾提到过这个函数,但还有一些内容我们未曾涉及:此函数不但可用于逐行读取,而且它还可以设为遇到某个特定字符后停止读取。下面给出传递这一参数的方法:

getline(array,array_size,delim);

以下为示例代码:

#include <fstream.h>

void main()
{
// 假设test_file.txt中已经存有"Hello World"这一内容
ifstream File("test_file.txt");

static char arr[10];

/* 读取,直到满足下面的条件之一:
1
)已经读取10个字符
2
)遇到字母"o"
3
)出现新一行
*/
File.getline(arr,10,'o');

cout << arr << endl;
// 将显示"Hell"
File.close();
}

peek() ——
此函数将返回输入流文件的下一个字符,但它不移动内置指针。我想你该记得,像get()这样的函数也返回输入流文件的下一个字符,而与此同时它将移动内置指针。所以当你再次调用get()函数的时候,它会返回再下一个字符,而非前面那个。哦,使用peek()也会返回字符,但它不会移动“光标”。所以,假如你连续两次调用peek()函数,它会返回同一个字符。考虑以下代码:

#include <fstream.h>

void main()
{
// 假设test_file.txt中已经存有"Hello World"这一内容
ifstream File("test_file.txt");

char ch;

File.get(ch);
cout << ch << endl;
// 将显示"H"

cout << char(File.peek()) << endl;
//将显示"e"
cout << char(File.peek()) << endl;
//将再次显示"e"

File.get(ch);
cout << ch << endl;
// 还是显示"e"

File.close();

}

顺便说一下,我忘了讲——peek()函数实质上返回的是字符的ASCII码,而非字符本身。因此,假如你想看到字符本身,你得像我在示例中做的那样进行调用(译注:即要转为char类型)

_unlink() ——
删除一个文件。假如你要使用此函数,需要在你的程序中包含io.h头文件。下面是示例代码:

#include <fstream.h>
#include <io.h>

void main()
{
ofstream File;

File.open("delete_test.txt");
//创建一个文件
File.close();

_unlink("delete_test.txt");
// 删除这个文件

// 试图打开此文件,但假如它已不存在
// 函数将返回一个ios::failbit错误值
File.open("delete_test.txt",ios::nocreate);

// 验证它是否返回该值
if(File.rdstate() == ios::failbit)
cout << "Error...!\n";
// 耶,成功了

File.close();

}

putback() ——
此函数将返回最后一个所读取字符,同时将内置指针移动-1个字符。换言之,如果你使用get()来读取一个字符后再使用putback(),它将为你返回同一个字符,然而同时会将内置指针移动-1个字符,所以你再次使用get()时,它还是会为你返回同样的字符。下面是示例代码:

#include <fstream.h>

void main()
{
// test_file.txt应包含内容"Hello World"
ifstream File("test_file.txt");

char ch;

File.get(ch);

cout << ch << endl;
// 将显示"H"

File.putback(ch);
cout << ch << endl;
// 仍将显示"H"

File.get(ch);
cout << ch << endl;
// 再一次显示"H"

File.close();
}

flush() —— 在处理输出流文件的时候,你所存入的数据实际上并非立刻写入文件,而是先放入一个缓冲区中,直到该缓冲区放满数据之后,这些数据才被存入真正的文件中(在你的磁盘上)。旋即缓冲区会被清空,再重新进行下一轮写入。
但假如你想在缓冲区写满之前就将其中的数据写入磁盘,则使用flush()函数。只须像这样进行调用:FileHandle.flush(),这样缓冲区内的数据将会写入实际的物理文件,而后缓冲区被清空。
再补充一点(高阶的)内容:flush()函数会调用与相应流缓冲(streambuf)相联系的sync()函数(出自MSDN)。
分享到:
评论

相关推荐

    c++文件输入输出

    C++ 文件输入输出 C++ 文件输入输出是 C++ 编程语言中的一种基本操作,用于将数据...文件操作是指将数据读取和写入到文件中的过程,C++ 提供了多种文件输入输出函数,可以组合使用,以实现复杂的文件输入输出操作。

    C++中的文件输入输出

    在C++中,还有许多其他的文件输入输出方法,例如使用get和getline函数来读取文件,使用put和write函数来写入文件等。这些方法都可以用于实现文件输入输出,但是在实际应用中,我们需要根据具体情况选择合适的方法。 ...

    流类库与输入/输出 c++实验报告

    这篇C++实验报告主要涉及了C++中的流类库及其在输入输出操作中的应用。流类库是C++标准库的重要组成部分,它提供了一种统一处理输入和输出的方法,包括控制数据格式、转换数据类型以及读写文件等功能。 1. **流的...

    c/c++函数大全(标准函数)

    - `printf` 和 `scanf`:这是最常用的输入输出函数,`printf` 用于格式化输出,`scanf` 用于格式化输入。 - `fprintf` 和 `fscanf`:与 `printf` 和 `scanf` 类似,但它们操作的是文件流而不是标准输入/输出。 - ...

    C/C++中文函数手册

    其中,C++的I/O流库(iostream)提供了`cin`和`cout`对象进行输入输出,`ifstream`和`ofstream`用于文件流操作;`std::string`类处理字符串操作,比C风格的字符数组更加安全便捷。 《C_C++中文函数手册》可能是将...

    C++文件输入输出

    ### C++ 文件输入输出知识点详解 #### 一、概述 在C++中,处理文件的输入输出主要依赖于`fstream.h`头文件中定义的几个关键类:`ifstream`(用于文件输入)、`ofstream`(用于文件输出)以及`fstream`(支持文件的...

    C、C++文件输入输出操作总结

    在C和C++编程语言中,文件输入输出(I/O)是程序与外部存储设备交互的重要部分。本文将深入探讨C/C++中的流式文件操作和I/O文件操作,包括常用函数的功能、用法以及一些关键概念。 首先,C语言中的文件操作主要依赖...

    C++输入输出流实验

    本实验旨在帮助学生深入理解和熟练运用C++中的输入输出流,包括标准输入输出流和文件输入输出流。 首先,我们关注的是标准输入输出流。在C++中,`std::cin` 用于标准输入,通常是从键盘获取用户输入;而 `std::cout...

    C++实验:输入输出流

    内容1:标准输入输出流重定向 (1) 新建一个工程demo1,设计一个类Time,成员变量为时(h)、分(m)、秒(s)。 (2) 分别为类Time重载提取运算符(&gt;&gt;)和插入运算符(&gt;&gt;)。 a. 输入格式:14 30 15 b. 输出格式:14.5042 (3) ...

    c++文件操作,输入输出

    C++的文件操作主要涉及到输入/输出流(Input/Output Stream),这是C++标准库中的一个核心部分,用于处理程序与外部数据源之间的数据传输。输入流允许从外部源(如磁盘文件或键盘)读取数据,而输出流则用于向外部...

    C/C++详细函数大全

    《C/C++详细函数大全》是一部综合性的编程资源,涵盖了C和C++语言中的各种函数,旨在为学习者提供详尽的函数介绍、说明及代码示例。此资源源自某培训学校的教学材料,以CHM(Compiled HTML Help)格式呈现,这种格式...

    C/C++标准库函数/系统函数手册

    例如,`iostream`库提供了输入输出流操作,如`cin`用于从标准输入读取数据,`cout`用于向标准输出写入数据;`algorithm`头文件中的`sort`函数可以对容器中的元素进行排序。 系统函数,又称POSIX函数,是操作系统...

    C、C++函数手册 C/C++函数手册

    1. **C语言函数**:C语言的函数包括基本的输入输出函数(如printf和scanf)、数学函数(如sqrt和pow)、内存管理函数(如malloc和free)等。这些函数构成了C语言的基础,对于任何C程序员来说都是必备知识。 2. **...

    C++基于链表的通讯录

    "C++基于链表的通讯录" 摘要:本资源是基于C++的通讯录控制系统,用于初学者学习数据结构链表参考...它展示了链表、结构体、函数、文件输入/输出、菜单系统、数据结构、程序设计、输入/输出操作和错误处理等多种技术。

    c++的文件操作函数详解

    ### C++ 文件操作函数详解 在C++编程语言中,文件操作是一项基本且重要的功能,它使得程序能够读取和写入外部数据,从而实现数据持久化存储的需求。...希望本文能够成为您深入探索C++文件操作领域的宝贵资源。

    C++程序设计与数据结构基础:第8章 C++ IO流标准库.ppt

    本章内容主要讲解了C++程序设计中的IO流标准库,涵盖了C++ I/O流概述、控制台与文件的输入与输出、外部存储介质、内存变量写文件(输出)读文件(输入)等方面的知识点。 一、C++ I/O流概述 * C++ I/O流是指数据从...

    VS C++模拟文件系统

    6. 输入/输出流:本资源使用C++语言的输入/输出流来实现文件系统的输入/输出操作,了解输入/输出流的基本概念和应用是学习和开发文件系统的基础。 7. 字符串处理:本资源使用C++语言的字符串处理函数来实现文件系统...

Global site tag (gtag.js) - Google Analytics