相关文章推荐
还单身的打火机  ·  WPF ...·  1 年前    · 
一身肌肉的砖头  ·  看视频截图-掘金·  1 年前    · 
帅气的酱牛肉  ·  LDAP和Active ...·  1 年前    · 
绅士的炒饭  ·  Admob iOS ...·  1 年前    · 

C中对文件的操作是通过 FILE文件指针 和相关关函数来实现的。

C++中是通过 fstream文件流 来实现的,其包含 ifstream ofstream fstream 三个类,通过定义这三个类的对象实现相对应的文件操作。

二、C中的文件操作

1、打开文件

包括 fopen() freopen() tmpfile() 三个函数,他们都会返回一个指向 FILE 对象的指针。该 FILE 对象包控制被打开文件相关联的流的所有信息,包括指向缓冲区的指针、文件位置指示器、指示错误和文件结尾情况的标志等。如果成功,该指针就指向已打开的流,如果失败,该指针就为空指针

打开文件后就可以调用相关函数对流进行处理。这些函数都把指向 FILE 对象的指针(FILE 指针)作为它们的参数之一。

FILE *fopen(const char * restrict filename, const char * restrict mode);
FILE *freopen(const char * restrict filename, const char * restrict mode, FILE * restrict stream);
FILE *tmpfile(void);
 * For example 
#include <stdio.h>
#include <stdbool.h>
_Bool isReadWriteable( const char *filename )
    FILE *fp = fopen( filename, "r+" ); //打开一个文件以用于读写
    if ( fp != NULL ) //fopen()是否执行成功
        fclose(fp);   //成功:关闭文件,没有错误需要处理
        return true;
    }else{ 
        return false; // 失败

 2、关闭文件

关闭文件时需要使用函数 fclose() 。关闭成功返回 0;异常返回 EOF,表示文件在关闭时发生错误。

int fclose( FILE *fp );

三、C++中的文件操作

C++中是通过 fstream 文件流(以及其成员函数)实现对文件的操作,头文件如下所示,其包含三个类:

  • ifstream(代表输入文件,从硬盘到内存,支持 >> 操作符)
  • ofstream(代表输出文件,从内存到硬盘,支持 << 操作符)
  • fstream(代表输入输出文件,同时支持 >><< 操作符)
​#include <fstream> //头文件
ofstream    //文件写操作,内存写入存储设备
ifstream    //文件读操作,存储设备读取到内存中
fstream     //读写操作,对打开的文件可进行读写操作

文件流的 常用成员函数 如下所示。从 bad() 函数开始为验证流状态的常用成员函数,返回值均为 bool 型。

  • open(),打开文件
  • close(),关闭文件
  • read(),顺序读数据
  • write(),顺序写数据
  • is_open(),判断文件是否打开,打开则返回true
  • bad(),如果在读写过程中出错,返回true
  • fail(),除了与bad()同样的情况下返回true外;遇到格式错误时也返回true,例如当需要读入一个int ,而得到一个char
  • eof(),如果读文件到达文件的末尾,返回true
  • good(),最通用的验证,如果遇上以上任何一个函数返回true的话,此函数返回false
  • clear(),重置以上成员函数所检查的状态标志,没有参数

1、打开文件——Open()函数

Open()函数如下,其中 filename 代表操作文件名、mode 代表打开方式、prot 代表打开文件属性

* Open函数的定义 void open(const char * filename, ios_base::openmode mode = ios_base::in | ios_base::out); void open(const wchar_t *_Filename, ios_base::openmode mode= ios_base::in | ios_base::out, int prot = ios_base::_Openprot); /* Mode的可选参数 */ ios::in 为输入(读)而打开文件 ios::out 为输出(写)而打开文件 ios::ate 初始位置:文件尾 ios::app 所有输出附加在文件末尾 ios::trunc 如果文件已存在先删除文件 ios::binary 二进制方式 /* Prot的可选参数 */ 0 普通文件,打开文件 1 只读文件 2 隐含文件 3 系统文件

打开文件的方式可以单一使用,或者使用 '|' 组合使用

ofstream outfile;
outfile.open("Hello.txt", ios::in|ios::out|ios::binary);

若仅使用默认的打开方式可以不用显式的调用open()函数,直接使用流对象进行文件的操作。当使用默认的方式打开文件时,可以使用成员函数 is_open() 对文件进行是否已打开的验证。

ofstream out("\\\", ios::out);
ifstream in("\\\", ios::in);
fstream iofile("\\\", ios::in|ios::out);

2、关闭文件——Close()函数

Close()函数,对文件进行完读写操作之后,必须将文件关闭使得文件重新变成可以访问的。close()函数负责将缓存中的数据排放出来并关闭文件。

3、文本文件的读写

文本文件的读/写可以利用 << >> 分别进行写和读

#include <fstream.h>
#include <iostream.h>
using namespace std;
int main() {...}
void func1(...) //文件的写操作
    ofstream file("out.txt"); 
    if(file.is_open())
        fil e<< "This is a test" << endl; 
        file.close();
void func2(...) //文本的读入,并打印在屏幕上
    char buff[520];
    ifstream infile("in.txt");
    if(!infile.is_open())
        cout << "Error open" << endl;
    while(!infile.eof())
        infile.getline(buff, 100);
        cout << buff << endl;
    return 0;

通过 read()write() 函数进行读写,它们是文件流为顺序读写数据特殊设计的成员函数。write是 ostream 的成员函数,read是 istream 的成员函数,类 fstream 的对象同时拥有这两个函数。

其原型如下, buffer 是一块用来存储或读出数据的内存地址,size 表示要从 buffer 中读出或写入的整数值。

write(char * buffer, streamsize size);
read(char * buffer, streamsize size);

4、获取和设置流指针

所有输入/输出流对象都有至少一个流指针:

  • ifstream,类似istream,有一个被称为get pointer的指针,指向下一个将被读取的元素;
  • ofsream,类似ostream,有一个被称为put pointer的指针,指向下一个元素的位置;
  • fstream,类似iostream,同时继承了 get 和 put ;

读取/配置流指针的成员函数

  • tellg() 和 tellp(),这两个函数不用传入参数,返回pos_type类型的值,即一个整数,代表当前get流指针的位置(用tellg)或put流指针的位置(用tellp)。
  • seekg() 和 seekp(),这对函数分别用来改变指针get和put的位置。两个函数都被重载为两种不同的原型:
//使用这个原型,流指针被改变为指向从文件开始计算的一个绝对位置;
//要求传入的参数类型与函数 tellg 和tellp 的返回值类型相同。
seekg(pos_type position);
seekp(pos_type position);
//使用这个原型可以指定由参数direction决定的一个具体的指针开始计算的一个位移(offset)。
seekg(off_type offset, seekdir direction);
seekp(off_type offset, seekdir direction);
//direct的可选参数
//ios::beg	从流开始位置计算的位移
//ios::cur	从流指针当前位置开始计算的位移
//ios::end	从流末尾处开始计算的位移

需要注意的是,流指针 get 和 put 的值对文本文件(text file)和二进制文件(binary file)的计算方法都是不同的,因为文本文件中某些特殊字符可能被修改。因此,建议

  • 对以文本文件模式打开的文件总是使用 seekg 和 seekp 的第一种原型,而且不要对tellg 或 tellp 的返回值进行修改;
  • 对二进制文件,你可以任意使用这些函数,应该不会有任何意外的行为产生;
//获取二进制文件的大小
#include <iostream.h>
#include <fstream.h>
const char * filename = "test.txt";
int main() 
    long l,m;
    ifstream in(filename, ios::in|ios::binary);
    l = in.tellg();
    in.seekg (0, ios::end);
    m = in.tellg();
    in.close();
    cout << "size of " << filename;
    cout << " is " << (m-l) << " bytes.\n";
    return 0;
                    一、C/C++对文件操作的实现C中对文件的操作是通过 FILE文件指针 和相关关函数来实现的。C++中是通过 fstream文件流来实现的,其包含ifstream、ofstream、fstream 三个类,通过定义这三个类的对象实现相对应的文件操作。二、C中的文件操作1、打开文件包括fopen()、freopen()、tmpfile() 三个函数,他们都会返回一个指向 FILE 对象的指针。该 FILE 对象包控制被打开文件相关联的流的所有信息,包括指向缓冲区的指针、文件位置指示器...
				
在看C++编程思想中,每个练习基本都是使用ofstream,ifstream,fstream,以前粗略知道其用法和含义,在看了几位大牛的博文后,进行整理和总结: 这里主要是讨论fstream的内容: #include ofstream //文件写操作 内存写入存储设备 ifstream //文件读操作,存储设备读区到内存中 fstream //读写操作,对打开的文件可进行读写操作 1.打开文件 在fstream类中,成员函数open()实现打开文件的操作,从而将数据流和文件进行关联,通过ofstream,ifstream,fstream对象进
c++中有个类叫做fstream,可以实现打开一个文件作为流。创建一个对象,然后调用该对象的open函数,其主要有两个参数,第一个参数是字符串,表示文件的地址,第二个参数是代开方式,如: fstream fin(a.txt,ios::in); if(fin) cout<<opened<<endl; fin.close(); cout<<not exists<<endl; 注意:如果文件不存在,则打开失败。如果这里打开方式采用的是ios::out,那么如果文件不存在,则会创建该文件。 fstream还有两个子类分别是ifstrea
首先需要包含头文件#include< fstream > fstream可以把它理解成一个父类,包含的子类有ifstream和ofstream等, fstream:文件输入输出类。表示文件级输入输出流(字节流); ifstream:文件输入类。表示从文件内容输入,也就是读文件; ofstream:文件输出类。表示文件输出流,即文件写。 所以一般直接创建一个父类对象即可(即fstream类的对象) C++中seep()和seekg()函数功能 seekg:设置输入文件流的文件流指       大学期间用vc++开发的简单的学生信息管理系统,主要有添加学生信息、删除学生信息、修改学生信息、查询学生信息、显示学生信息、综合统计(各课程平均成绩和合格率)、总分排序和退出系统。设计: 二、详解 (1)main.cpp #include<iostream> #include<fstream> #include<iomanip> //使用setw()函数 #include<windows> //使用system()函数 #include<conio> //使用getch(),输入任意字符 #include <string> //使用st 2.2.1 修剪(trim.hpp) 24 2.2.2 转换(case_conv.hpp) 26 2.2.3 判断式、断言函数(predicate.hpp)【Predicates】 27 2.2.4 查找 28 2.2.5 删除和替换 29 2.2.6 分割和组合 31 2.2.7 其它 32 三、 C字符串 32 3.1 C字符串常用算法 32 3.1.1 strcpy wcscpy 32 3.1.2 strcat wcscat 32 3.1.3 strchr wcschr 32 3.1.4 strcmp wcscmp 33 3.1.5 stricmp wcsicmp 33 3.1.6 strlen wcslen 33 3.1.7 strlwr/_strlwr wcslwr/_wcslwr 33 3.1.8 strncat wcsncat 33 3.1.9 strcspn wcscspn 33 3.1.10 strdup/_strdup wcsdup/_wcsdup 34 3.1.11 strncpy wcsncpy 34 3.1.12 strpbrk wcspbrk 35 3.1.13 strrev/_strrev wcsrev/_wcsrev 35 3.1.14 strset/_strset/_strset_l wcsset/_wcsset/_wcsset_l 35 3.1.15 strstr/wcsstr 35 3.1.16 strtok/wcstok 36 3.1.17 strupr/_strupr wcsupr/_wcsupr 36 3.2 更安全的C字符串函数 36 3.2.1 简述 36 3.2.2 简单实例 36 3.2.3 定制 38 3.2.4 兼容 41 3.3 通用字串函数 47 3.3.1 简述 47 3.3.2 简单实例 47 3.3.3 映射表 48 3.4 API级的字符串处理 48 3.4.1 简述 48 3.4.2 旧的API 48 3.4.3 Shell字符串函数 48 3.4.4 新的安全版字符串处理API 48 四、 C++字符串使用的建议 51 附录1:参考资料: 51 附录2: MSSTL中basic_string的部分源码解读 51 2.1 string的allocator 51 2.1.1 Allocate和Deallocate 51 2.1.2 allocator的泛型实现 52 2.1.3 string与char_traits 54 2.1.4 以char和wchar_t特化char_traits 56 附录3:Boost.Format中文文档 57 2.1 大纲 57 2.2 它是如何工作的 57 2.3语法 58 2.3.1 boost::format( format-string ) % arg1 % arg2 % ... % argN 58 2.3.2 printf 格式化规则 59 2.3.3 新的格式规则 60 附录4 TCHAR.h 映射表 60
C语言头文件 FSTREAMC语言头文件 FSTREAMC语言头文件 FSTREAMC语言头文件 FSTREAMC语言头文件 FSTREAMC语言头文件 FSTREAMC语言头文件 FSTREAMC语言头文件 FSTREAMC语言头文件 FSTREAMC语言头文件 FSTREAMC语言头文件 FSTREAMC语言头文件 FSTREAMC语言头文件 FSTREAMC语言头文件 FSTREAMC语言头文件 FSTREAMC语言头文件 FSTREAMC语言头文件 FSTREAMC语言头文件 FSTREAMC语言头文件 FSTREAMC语言头文件 FSTREAMC语言头文件 FSTREAMC语言头文件 FSTREAMC语言头文件 FSTREAMC语言头文件 FSTREAMC语言头文件 FSTREAMC语言头文件 FSTREAMC语言头文件 FSTREAMC语言头文件 FSTREAMC语言头文件 FSTREAMC语言头文件 FSTREAMC语言头文件 FSTREAMC语言头文件 FSTREAMC语言头文件 FSTREAMC语言头文件 FSTREAMC语言头文件 FSTREAMC语言头文件 FST
ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间; 在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符: 1、插入器(<<)   向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<“Write Stdout”<<’\n’;就表示把字符串"WriteStdout"和换行字符(’\n’)输出
库包含了三个基本的类:ifstream, ofstreamfstream。这三个类分别代表一个输入文件,一个输出文件,以及一个输入输出文件。Ifstream类支持>>操作符,ofstream类支持>和对象都能够把一个文件名当成构造函数的变量,并能够自动的打开文件,如: std::ofstream dictionary("myfile.txt"); 类的析构函数自动地添加清除文件
您好,可以使用C/C++编程语言提取TXT文本中两个关键词之间的内容。您可以先读取整个文本文件,然后使用字符串函数找到第一个关键词出现的位置,再使用同样的方法找到第二个关键词出现的位置,最后提取两个关键词之间的内容并输出即可。以下是一个简单的C++示例代码: ```cpp #include <iostream> #include <fstream> #include <string> using namespace std; int main() { string filename = "test.txt"; // 替换成你的文本文件名 string keyword1 = "关键词1"; // 替换成你要查找的第一个关键词 string keyword2 = "关键词2"; // 替换成你要查找的第二个关键词 ifstream file(filename); if (!file.is_open()) { cout << "无法打开文件!" << endl; return 1; string content; getline(file, content, '\0'); // 读取整个文件内容 size_t pos1 = content.find(keyword1); size_t pos2 = content.find(keyword2); if (pos1 == string::npos || pos2 == string::npos || pos1 >= pos2) { cout << "无法找到指定的关键词!" << endl; return 1; string result = content.substr(pos1 + keyword1.length(), pos2 - pos1 - keyword1.length()); cout << result << endl; return 0; 在以上代码中,`filename`、`keyword1`和`keyword2`分别表示要操作的文件名、要查找的第一个关键词和第二个关键词。程序会先打开文件,然后读取整个文件内容并存储到字符串变量`content`中。接下来使用`string::find()`函数查找两个关键词在`content`中的位置,如果找到了则使用`string::substr()`函数提取两个关键词之间的内容并存储到字符串变量`result`中,最后将结果输出到控制台。 需要注意的是,以上代码只是一个简单的示例,实际应用中还需要考虑更多的异常情况和错误处理。