使用C++的fstream读取有结构的字符串和数值混排的文本文件
- 格式:doc
- 大小:20.50 KB
- 文档页数:2
c++文本文件打开读写的常用方法x一、文件打开、读取、关闭(1)文件打开文件打开可以使用内置类fstream(文件流),通过fstream来完成打开文件的操作。
主要的步骤包括:1. 声明一个fstream类对象。
2. 调用open函数(打开一个文件),引入文件名及其打开模式。
(2)文件读取文件读取也是使用fstream类,它有两个成员函数可以实现:1. read()函数:该函数接受一个char指针参数,用于把从文件中读取的字符串复制到该char指针中,返回值是读取多少个字节。
2. getline()函数:用于从文件中读取一行文本,接受一个char 指针参数,用于把读取到的一行文本复制到该char指针中,返回值是读取的字符数。
(3)文件关闭关闭文件也是使用fstream类,它有两个成员函数可以实现:1.good()函数:用于检验文件是否合法,即文件打开没有出错,此函数返回1,否则返回0。
2.close()函数:用于关闭已经打开的文件,不调用此函数,文件就无法关闭。
二、文件写入文件写入也是使用fstream类,它有两个成员函数可以实现:1. write()函数:接受一个char指针参数,用于把要写入的字符串复制到该char指针中,返回值是写入多少个字节。
2.put()函数:用于写入一个字符,接受一个char参数,用于把要写入的字符复制到该char参数中,返回值是被写入字符的ASCII 码值。
(2)文件追加如果要在文件末尾追加信息,可以使用fstream类的seekp()函数,其原型为:seekp(off_type off,ios::seekdir dir);其中off_type是long类型,可以使用正数表示文件末尾偏移,也可以使用负数表示文件起始处偏移,dir参数用于指定偏移的方向,其可选值有:ios::beg(指定偏移起点为文件起始处)、ios::cur(指定偏移起点为当前位置)、ios::end(指定偏移起点为文件末尾)。
fstream是C++标准库中用来进行文件输入输出的类,它提供了丰富的成员函数和操作符重载,能够很方便地进行文件的读写操作。
1. fstream类的定义和声明在使用fstream类之前,需要包含<fstream>头文件。
然后可以使用fstream类的对象来进行文件的打开、读写等操作。
2. 文件的打开和关闭可以使用fstream对象的open成员函数来打开文件,语法如下:```cppvoid open (const char* filename, ios::openmode mode);```filename为文件名,mode为打开文件的模式,包括in,out,ate,app等。
使用完文件后应当使用close()函数关闭文件。
3. 文件的读取使用ifstream类对象可以进行文件的读取操作。
可以使用`>>`操作符来逐个读取文件中的数据:```cppint num;ifstream inFile;inFile.open("data.txt");inFile >> num;```这里的data.txt是需要读取的文件名,num是用来存储读取到的数据的变量。
也可以使用getline函数来逐行读取文件中的内容:```cppstring line;ifstream inFile;inFile.open("data.txt");while (getline(inFile, line)){// 处理line}inFile.close();```4. 文件的写入使用ofstream类对象可以进行文件的写入操作。
可以使用`<<`操作符来向文件中逐个写入数据:```cppint num = 10;ofstream outFile;outFile.open("output.txt");outFile << num;```这里的output.txt是需要写入的文件名,num是需要写入文件中的数据。
用C#读取txt文件的方法1、使用FileStream读写文件文件头:using System;using System.Collections.Generic;using System.Text;using System.IO;读文件核心代码:byte[] byData = new byte[100];char[] charData = new char[1000];try{FileStream sFile = new FileStream("文件路径",FileMode.Open);sFile.Seek(55, SeekOrigin.Begin);sFile.Read(byData, 0, 100); //第一个参数是被传进来的字节数组,用以接受FileStream对象中的数据,第2个参数是字节数组中开始写入数据的位置,它通常是0,表示从数组的开端文件中向数组写数据,最后一个参数规定从文件读多少字符.}catch (IOException e){Console.WriteLine("An IO exception has been thrown!");Console.WriteLine(e.ToString());Console.ReadLine();return;}Decoder d = Encoding.UTF8.GetDecoder();d.GetChars(byData, 0, byData.Length, charData, 0);Console.WriteLine(charData);Console.ReadLine();写文件核心代码:FileStream fs = new FileStream(文件路径,FileMode.Create);//获得字节数组byte [] data =new UTF8Encoding().GetBytes(String);//开始写入fs.Write(data,0,data.Length);//清空缓冲区、关闭流fs.Flush();fs.Close();2、使用StreamReader和StreamWriter文件头:using System;using System.Collections.Generic;using System.Text;using System.IO;StreamReader读取文件:StreamReader objReader = new StreamReader(文件路径);string sLine="";ArrayList LineList = new ArrayList();while (sLine != null){sLine = objReader.ReadLine();if (sLine != null&&!sLine.Equals(""))LineList.Add(sLine);}objReader.Close();return LineList;StreamWriter写文件:FileStream fs = new FileStream(文件路径, FileMode.Create);StreamWriter sw = new StreamWriter(fs);//开始写入sw.Write(String);//清空缓冲区sw.Flush();//关闭流sw.Close();fs.Close();用C#读取.txt文件,常用StreamReader sr = new StreamReader("TestFile.txt")///StreamReader sr = new StreamReader("TestFile.txt",Encoding.GetEncoding("GB2312"))///GBKString line;while ((line = sr.ReadLine()) != null){textBox1 .Text +=ii.ToString ()+" -"+line.ToString()+"\r\n";}加入引用:System.IOStreamReader objReader = new StreamReader("c:\\test.txt");System.IO 命名空间中的对象,尤其是System.IO.StreamReader 类。
【转载】C++中文件流(fstream)的使用方法及示例(2011-08-22 16:00:14)转载▼分类:编程拾萃标签:杂谈C++文件流:fstream // 文件流ifstream // 输入文件流ofstream // 输出文件流头文件:#include <fstream>//创建一个文本文件并写入信息//同向屏幕上输出信息一样将信息输出至文件#include<iomanip.h>#include<fstream>void main(){ofstream ofs("C:\\example.txt"); //打开文件用于写,若文件不存在就创建它if (!ofs) return; //打开文件失败则结束运行f1 << setw(20) << "Name: " << "Beethoven" << endl; //使用插入运算符写文件内容f1 << setw(20) << "song: " << "Moonlight Sonata" << endl; f1.close(); //关闭文件}文件操作:打开文件文件名注意路径名中的斜杠要双写,如:"D:\\MyFiles\\ReadMe.txt"文件打开方式选项:ios::in = 0x01, //供读,文件不存在则创建(ifstream默认的打开方式)ios::out = 0x02, //供写,文件不存在则创建,若文件已存在则清空原内容(ofstream默认的打开方式)ios::ate = 0x04, //文件打开时,指针在文件最后。
可改变指针的位置,常和in、out联合使用ios::app = 0x08, //供写,文件不存在则创建,若文件已存在则在原文件内容后写入新的内容,指针位置总在最后ios::trunc = 0x10, // 在读写前先将文件长度截断为0(默认)ios::nocreate = 0x20, //文件不存在时产生错误,常和in或app联合使用ios::noreplace = 0x40, //文件存在时产生错误,常和out联合使用ios::binary = 0x80 //二进制格式文件文件保护方式选择项:filebuf::openprot; //默认的兼容共享方式filebuf::sh_none; //独占,不共享filebuf::sh_read; //读共享filebuf::sh_write; //写共享打开文件的方法调用构造函数时指定文件名和打开模式ifstream f("d:\\12.txt", ios::nocreate); //默认以 ios::in 的方式打开文件,文件不存在时操作失败ofstream f("d:\\12.txt"); //默认以 ios::out的方式打开文件fstream f("d:\\12.dat", ios::in|ios::out|ios::binary); //以读写方式打开二进制文件使用Open成员函数fstream f;f.open("d:\\12.txt",ios::out); //利用同一对象对多个文件进行操作时要用到open函数检查是否成功打开成功:if (f) {...} //对ifstream、ofstream对象可用,fstream对象不可用。
c++ fstream 使用(一)2009-07-14 10:37(1)基本使用1、包含的头文件#include <fstream>using namespace std;1)C++中的三个文件流ofstream ofs("文件名", 打开方式);ifstream ifs("文件名", 打开方式);fstream fs("文件名",输入打开方式| 输出打开方式);三种文件流分别用于写文件、读文件、读写文件三种文件流都可先定义,再打开文件,以fstream为例fstream fs;fs.open("文件名", 输入打开方式| 输出打开方式);其中“打开方式”可以不给出。
若不给出,对于oftream默认为ios::out,iftream默认为ios::in2)打开方式ios::out 输出数据覆盖现有文件ios::app 输出数据填加之现有文件末尾ios::ate 打开文件并移动文件指针至末尾ios::in 打开文件以输入ios::trunc 输出文件中现有内容(ios::out的默认操作)ios::binary 二进制打开供读写2、文件指针和C的文件操作方式不同的是,C++ I/O系统管理两个与一个文件相联系的指针。
一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。
每次执行输入或输出时,相应的指针自动变化。
所以,C++的文件定位分为读位置和写位置的定位,对应的成员函数是 seekg()和 seekp(),seekg()是设置读位置,seekp是设置写位置。
它们最通用的形式如下:istream &seekg(streamoff offset,seek_dir origin);ostream &seekp(streamoff offset,seek_dir origin);streamoff定义于 iostream.h 中,定义有偏移量 offset 所能取得的最大值,seek_dir 表示移动的基准位置,是一个有以下值的枚举:ios::beg:文件开头ios::cur:文件当前位置ios::end:文件结尾这两个函数一般用于二进制文件,因为文本文件会因为系统对字符的解释而可能与预想的值不同。
fstream使用方法介绍fstream是C++标准库中的一个输入/输出流类,用于文件的读写操作。
它是fstream类的派生类,继承了fstream类的所有操作。
fstream类封装了对文件的操作,提供了很多方便的方法,使得文件的读写变得简单和高效。
```cppclass fstream : public iostreampublic:explicit fstream(const char* filename, ios_base::openmode mode = ios_base::in , ios_base::out);explicit fstream(const std::string& filename,ios_base::openmode mode = ios_base::in , ios_base::out);void open(const char* filename, ios_base::openmode mode =ios_base::in , ios_base::out);void open(const std::string& filename, ios_base::openmode mode = ios_base::in , ios_base::out);void close(;bool is_open( const;};```- ios_base::in:以读模式打开文件。
- ios_base::out:以写模式打开文件。
- ios_base::binary:以二进制模式打开文件。
- ios_base::ate:打开文件后立即将文件指针定位到文件末尾。
- ios_base::app:打开文件后将文件指针定位到文件末尾。
- ios_base::trunc:如果文件已存在,则删除文件内容。
- ios_base::in , ios_base::out:以读写模式打开文件。
ifstream 读入文件的规则ifstream是C++中的输入文件流,用于从文件中读取数据。
以下是使用ifstream读取文件的规则:1. 打开文件:使用ifstream对象的open()函数打开文件。
需要提供文件路径作为参数。
例如:```cppifstream input;("");```2. 检查文件是否成功打开:在打开文件后,应检查文件是否成功打开。
可以使用ifstream对象的is_open()函数来检查。
例如:```cppif (!_open()) {// 文件打开失败,处理错误}```3. 读取数据:使用ifstream对象的方法来读取文件中的数据。
可以使用不同的方法来读取不同类型的数据,例如:读取字符:使用ifstream对象的get()函数读取单个字符。
例如:```cppchar c = ();```读取字符串:使用ifstream对象的read()函数读取字符串。
例如:```cppstring str;(str, ()); // 读取直到文件末尾或读取指定长度```读取整数值:使用ifstream对象的read()函数读取整数值。
例如:```cppint number;input >> number; // 使用提取运算符读取整数值```4. 关闭文件:在完成文件读取后,应关闭文件。
可以使用ifstream对象的close()函数关闭文件。
例如:```cpp();```5. 处理异常:如果在读取文件时发生错误,例如读取无效的数据或文件无法打开,可以使用ifstream对象的方法来检测和处理异常。
例如,可以在读取数据之前设置异常标志,一旦出错则自动抛出异常。
例如:```cpp(ios::failbit); // 设置异常标志,当出现错误时抛出异常try {int number;input >> number; // 尝试读取整数值,如果出错则抛出异常} catch (const ios::failure& e) {// 处理异常情况,例如输出错误信息或进行恢复操作} ```。
c++一次读取文件的四种方法C++是一种流行的编程语言,经常用于处理文件和数据。
在C++中,读取文件是一项常见的任务。
在这篇文章中,我们将介绍四种C++读取文件的方法。
1. 使用fstream类:使用fstream类可以方便地打开文件、读取和写入数据。
以下是一个基本的读取文件的示例:```#include <fstream>#include <string>#include <iostream>using namespace std;int main(){string line;ifstream myfile('example.txt');if (myfile.is_open()){while (getline(myfile,line)){cout << line << '';}myfile.close();}else cout << 'Unable to open file';return 0;}```2. 使用fgets()函数:fgets()函数从文件中读取一行数据,并将其存储在缓冲区中。
以下是一个基本的使用fgets()函数的示例: ```#include <cstdio>int main(){FILE* f = fopen('example.txt', 'r');if (f == NULL){perror('Error opening file');return(-1);}char buffer[256];while (fgets(buffer, 256, f)){printf('%s', buffer);}fclose(f);return 0;}```3. 使用get()和put()函数:get()函数从文件中读取一个字符,put()函数将一个字符写入文件。
C++流操作之fstream⽤法介绍在Windows平台对⽂件进⾏存取操作可选的⽅案有很多,如果采⽤纯C,则需要⽤到File*等,当然也可以直接调⽤Windows API来做;如果采⽤C++,⾸先想到的就是⽂件流fstream。
虽然在COM层⾯上,我们还可以使⽤IStream来实现⽂件的读写,其效率也⾮常⾼。
不过本⽂仅对C++流操作做简单的探讨,相⽐于Windows API或IStream,C++的流操作通⽤性更好⼀些,因为你能轻松将代码移植到其它平台上。
fstream有两个派⽣类,即ifstream和ofstream,分别对应输⼊⽂件流、输出⽂件流。
在使⽤它们之前,必须将它们的头⽂件包含到你的cpp⽂件中。
创建⼀个⽂件流的⽅法很简单:ifstream fin;fin.open("C:\filename.txt");这样就创建了⼀个输⼊⽂件流fin,它对应的⽂件是C盘根⽬录下的filename.txt。
实际上,open⽅法还包含⼀个参数mode,⽤以指定其打开⽅式。
ios::in 以读取⽅式打开⽂件ios::out 以写⼊⽅式打开⽂件ios::ate 存取指针在⽂件末尾ios::app 写⼊时采⽤追加⽅式ios::trunc 写⼊时抹去旧数据ios::binary 以⼆进制⽅式存取上⾯的代码并未指定任何打开⽅式,则采⽤默认参数:输⼊⽂件流即ios::in,输出⽂件流即ios::out。
⼀般在需要组合特殊的mode才显式指定,⽐如:ios::in | ios::binary; //以⼆进制⽅式读取⽂件除此之外,还可以在构造时指定相应的⽂件路径和名称,让创建过程⼀步到位。
上述代码可改写为:ifstream fin("C:\filename.txt");与open⽅法相反的是close⽅法,它的作⽤与open正好相反。
open是将⽂件流对象与外设中的⽂件关联起来,close则是解除⼆者的关联。
c++中fstream对txt⽂件的读写操作c语⾔中,对⽂件的操作⼀般通过⽂件指针FILE*来进⾏。
然⽽,c++有着更为便捷的操作——⽂件流。
好吧,其实我也不是很熟悉“流”的具体概念,等以后深⼊学习后,⼀定会把这个坑填上。
在此简单记录⼀下⽂件流fstream的⽤法;可以简单得把它看成⼀个类,包含在头⽂件<fstream>中。
当我们写上#include<fstream>后,就可以使⽤ifstream,ofstream,fstream三个类来定义对象了。
例如:ifstream infile();成功定义了⼀个名叫infile的对象,可以调⽤ifstream中的函数;但是,此时infile只是⼀个对象,并没有和我们需要读取的⽂件产⽣关联。
⽬前,我发现共有两种⽅式1、通过ifstream的函数 .open(),这个函数有⼏种重载的⽅式1. ⾸先,关于路径,⼀共有5种⽅式:1. 相对路径,当你所要操作的⽂件与你的.cpp⽂件在同⼀个⽬录下,就可以使⽤相对路径,相对路径必须将⽂件格式写清楚,例如:infile.open("ans.txt");2. 绝对路径,可以搜索到电脑中所有的⽂件,但路径必须正确,例如:infile.open("D:\Codeblock\test\formulations.txt");3. 可以填⼊⼀个是指向字符串⽂件名的指针,例如:const char* str=”ans.txt"; infile.open(str);4. 可以填写⼀个内容等于⽂件名字的string常量,例如:const string str = “ans.txt"; infile.open(str);5. 如果不是const string ,⽽是string,那必须使⽤infile(str.c_str()); 此处.c_str()是string的⼀个成员函数,⽬标是将string变成conststring .关于string和const string 之间的区别嘛,emmmmmm,有空⼀定填上2. ios::app //在⽂件末尾补⼊ios::ate //定位到⽂件末尾,app包含此项属性ios::binary //以⼆进制的⽅式读取⽂件ios::in//读⽂件ios::out//输⼊⽂件ios::nocreate //不创造,如果⽂件不存在,则失败ios::noreplace//不覆盖,如果⽂件存在,则失败ios::trunc //如果⽂件存在,则将⽂件内容清空 3.多种⽂件的打开⽅式能使⽤或运算("|") ,例如:infile("ans.txt",ios::app | ios::out);4.打开⽂件的属性,prot.好像不常⽤,等哪天⽤到了,再来写2. 第⼆种打开⽅式则更为简单,利⽤初始化的⽅法,例如 ifstream infile("ans.txt");当然,初始化的时候,也可以加上mode,例如 ifstream infile("ans.txt",ios::app);.is_open() 的⽤法#include <fstream>using namespace std;int mian(){ifstream infile ;infile.open("ans.txt");if(!infile.is_open()){cout<<"Wrong"<<endl;return0;}.......................return0;}。
因为要经常接触字符串和数值混排的数据文本文件,所以,如何有效的读取这类文件成了我头痛的事,不过今日学习了日志[1],找到的解决方法,编程读写实例如下。
要读取的目标文件dat.txt内容如下:
zzz 8 10.0 2.5 2.55
llz 10 20.2 3.9 4.96
读写方法编程如下:
#include <fstream>
#include <iostream>
using namespace std;
void main()
{
ifstream fin;
char name[20];
int inum;
float fnum[3];
fin.open("dat.txt"); // 打开要读的文件
if (fin.good()) // 判断是否成功打开
{
while (!fin.eof())
{
fin >> name; // 读取字符串
fin >> inum; // 读取整数数值
for(int i = 0; i < 3; i++)
{
fin >> fnum[i]; // 循环读取浮点数
}
cout << name << ' ' << inum << ' ' << fnum[2] << endl; //显示检验结果的正确性
}
}
else
{
cout << "File can't open" << endl;
}
fin.close(); // 关闭文件
}
运行结果如下:
zzz 8 2.55
llz 10 4.96
Press any key to continue。