vc++读写txt
vs2010中 c++ 怎么读写Txt文件括号中的内容

读:从外部文件中将数据读到程序中来处理
对于程序来说,是从外部读入数据,因此定义输入流,即定义输入流对象:ifsteam infile,infile就是输入流对象。
这个对象当中存放即将从文件读入的数据流。假设有名字为myfile.txt的文件,存有两行数字数据,具体方法:
ofstream outfile;
outfile.open("myfile.bat"); //myfile.bat是存放数据的文件名
if(outfile.is_open())
{
outfile<<message<<endl; //message是程序中处理的数据
outfile.close();
}
else
int a,b;
ifstream infile;
infile.open("myfile.txt"); //注意文件的路径
infile>>a>>b; //两行数据可以连续读出到变量里
infile.close()
如果是个很大的多行存储的文本型文件可以这么读:
char buf[1024]; //临时保存读取出来的文件内容
{
cout<<"不能打开文件!"<<endl;
}
小例子:
#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;
int main(){
char buffer[256];
C技巧:VC读取和分析格式化文本配置文件

⼤多数的应⽤程序都有需要配置的参数,配置参数的保存有多种⽅法,⽐如采⽤数据库保存、⼆进制⽂件保存、格式化的⽂本⽂件保存,各有优缺点,对于⼀般⼩的安全性要求不⾼应⽤程序,推荐采⽤格式化⽂本⽂件保存⽅式,这样可以节约编辑修改的界⾯编程,使⽤记事本程序编辑即可。
早期的windows就是采⽤的INI格式⽂本⽂件。
现在很多应⽤程序包括⼤型的软件也还在采⽤格式化⽂本⽂件保存配置参数,⽐如Bentely MicroStation GIS平台GEOGRAPHICS8.0。
本⽂给出的就是利⽤VC来读取和分析配置⽂本⽂件,这是笔者这消防监控系统远程终端软件使⽤的⽅法。
同时给出⼀个C++类来封装配置⽂本⽂件的读取分析。
下⾯是我采⽤的配置⽂件的例⼦,包含单个参数定义,表格参数定义,注释: // 协议名称: TL // ⼯程: SQ // 配置⼈: JY #DEFINE_BEGIN //以下为常量定义 //通信参数 @COM_PORT \\\\.\\COM1 //COM⼝ @COM_BAUDRATE 1200 //波特率 @COM_BITSIZE 8 //数据位 number of bits/byte, 4-8 @COM_SBIT 0 // 0,1,2 对应 1, 1.5, 2 @COM_PARITY 0 //0-4对应no,odd,even,mark,space @STATIONNO 0 //终端号 @TCPIP_SERVERIP 192.168.0.10 //服务器IP地址 @TCPIP_PORTNO 3024 //端⼝ #DEFINE_END #TABLE_BEGIN //表格 //编号识别字符串 //例⼦如下 0 Ion Detector, ALU1, L1S43 //测量台2#离⼦烟感探测器报警 1 Thermal Det, ALU1, L1S39 //值班室温感探测器报警 #TABLE_END 语法解释: // 单⾏注释 #DEFINE_BEGIN 单个参数定义的开始标记 #DEFINE_END 单个参数定义的结束标记 #TABLE_BEGIN 表格参数开始标记 #TABLE_END 表格参数结束标记 单个参数的配置: 每个参数⼀⾏:以空格、TAB制表符作为分隔,注释可选,每⾏结束后有Enter键换⾏。
C++中Txt文件读取和写入

文件状态 我用过的唯一一个状态函数是 eof(), 它返回是否标志已经到了文件末尾。 我主要用在循பைடு நூலகம்中。 例如, 这个代码断统计小写‘e’ 在文件中出现的次数。
This is really awesome! 如果你想把整行读入一个 char 数组, 我们没办法用">>"?操作符,因为 每个单词之间的空格(空白字符)会中止文件的读取。为了验证:
char sentence[101]; fin >> sentence; 我们想包含整个句子, "This is really awesome!" 但是因 为空白, 现在它只包含了"This". 很明显, 肯定有读取整行的方法, 它就是 getline()。这就是我们 要做的。
fout.open("output.txt"); 你也可以把文件名作为构造参数来打开一个文件.
ofstream fout("output.txt"); 这是我们使用的方法, 因为这样创建和打开一个文件看起来更简单. 顺便说一句, 如果你要打开的文件不存在,它会为你创建一个, 所以不用担心文件创建的问题. 现在就输出到文件,看起来和"cout"的操作很像。对不了解控制台输出"cout"的人, 这里有个例 子。
int num = 150; char name[] = "John Doe"; fout << "Here is a number: " << num << "/n"; fout << "Now here is a string: " << name << "/n"; 现在保存文件,你必须关闭文件,或者回写 文件缓冲. 文件关闭之后就不能再操作了, 所以只有在你不再操作这个文件的时候才调用它,它 会自动保存文件。回写缓冲区会在保持文件打开的情况下保存文件, 所以只要有必要就使用它。 回写看起来像另一次输出, 然后调用方法关闭。像这样:
C++读写TXT文件中的string或者int型数据以及string流的用法

C++读写TXT⽂件中的string或者int型数据以及string流的⽤法对⽂件的读写操作是我们在做项⽬时经常⽤到的,在⽹上看了很多博客,结合⾃⾝的项⽬经验总结了⼀下,因此写了这篇博客,有些地⽅可能直接从别的博客中复制过来,但是都会注明出处。
⼀、⽂件的输⼊输出fstream提供了三个类,⽤来实现c++对⽂件的操作。
(⽂件的创建、读、写)。
ifstream -- 从已有的⽂件读⼊ofstream -- 向⽂件写内容fstream - 打开⽂件供读写⽂件打开模式:ios::in 只读ios::out 只写ios::app 从⽂件末尾开始写,防⽌丢失⽂件中原来就有的内容ios::binary ⼆进制模式ios::nocreate 打开⼀个⽂件时,如果⽂件不存在,不创建⽂件ios::noreplace 打开⼀个⽂件时,如果⽂件不存在,创建该⽂件ios::trunc 打开⼀个⽂件,然后清空内容ios::ate 打开⼀个⽂件时,将位置移动到⽂件尾⽂件指针位置在c++中的⽤法:ios::beg ⽂件头ios::end ⽂件尾ios::cur 当前位置例⼦:file.seekg(0,ios::beg); //让⽂件指针定位到⽂件开头file.seekg(0,ios::end); //让⽂件指针定位到⽂件末尾file.seekg(10,ios::cur); //让⽂件指针从当前位置向⽂件末⽅向移动10个字节file.seekg(-10,ios::cur); //让⽂件指针从当前位置向⽂件开始⽅向移动10个字节file.seekg(10,ios::beg); //让⽂件指针定位到离⽂件开头10个字节的位置注意:移动的单位是字节,⽽不是⾏。
常⽤的错误判断⽅法:good() 如果⽂件打开成功bad() 打开⽂件时发⽣错误eof() 到达⽂件尾以上内容参考⾃:/helinsen/archive/2012/07/26/2609251.html下⾯给出⼀个例⼦,读取hello.txt⽂件中的字符串,写⼊out.txt中:#include <vector>#include <string>#include <fstream>#include <iostream>using namespace std;int main(){ifstream myfile("G:\\C++ project\\Read\\hello.txt");ofstream outfile("G:\\C++ project\\Read\\out.txt", ios::app);string temp;if (!myfile.is_open()){cout << "未成功打开⽂件" << endl;}while(getline(myfile,temp)){outfile << temp;outfile << endl;}myfile.close();outfile.close();return 0;} hello.txt⽂件中的内容为:上式程序执⾏3遍后,out.txt⽂件中的内容为:上述代码读取的是string类型的数据,那么对于int型数据该怎么办呢,其实道理差不多,下⾯举例说明:#include<iostream>#include <string>#include <vector>#include <fstream> //⽂件流库函数using namespace std;int cost[10][10];int main(){int v, w, weight;ifstream infile; //输⼊流ofstream outfile; //输出流infile.open("G:\\C++ project\\Read\\data.txt", ios::in);if(!infile.is_open ())cout << "Open file failure" << endl;while (!infile.eof()) // 若未到⽂件结束⼀直循环{infile >> v >> w >> weight;cost[v][w] = weight;cost[w][v] = weight;}infile.close(); //关闭⽂件outfile.open("G:\\C++ project\\Read\\result.txt", ios::app); //每次写都定位的⽂件结尾,不会丢失原来的内容,⽤out则会丢失原来的内容if(!outfile.is_open ())cout << "Open file failure" << endl;for (int i = 0; i != 10; ++i){for (int j = 0; j != 10; ++j){outfile << i << "\t" << j << "\t" << cost[i][j] << endl; //在result.txt中写⼊结果}}outfile.close();return 0;while (1);} 上述代码的功能是读取data.txt⽂件的数据,注意,此时要求data.txt⽂件中的数据是三个⼀⾏,每个数据⽤空格隔开,之所以这样做,是因为在许多项⽬中,⽐如某为的算法⽐赛中,根据图的数据构建图的邻接矩阵或者邻接表时,数据都是这样安排的,在上⾯的代码中v和w 代表顶点标号,weight代表边<v,w>的权值,上述代码的功能就是构建由data.txt⽂件描述的图的邻近矩阵。
VC逐行读写文件(.TXT)

VC逐行读写文件(.TXT)时间:2010-02-05 16:22来源:未知作者:zzl 点击:1973次用流在写日志时,发现如果把"\r\n"直接写在字符串的尾部,则会造成乱码,其中的原因网上有很多说明,主要是标准库与WINDOWS的回车换行的机制略有差别。
但只要写到另一行重起就没有用流在写日志时,发现如果把"\r\n"直接写在字符串的尾部,则会造成乱码,其中的原因网上有很多说明,主要是标准库与WINDOWS的回车换行的机制略有差别。
但只要写到另一行重起就没有问题了。
/******************************************************************** ********** 写入日志文件-C++标准版(UNICODE)* 函数名:WriteLogTxt* 功能写入日志* 说明:* 参数:* 创建人:fjf* 创建时间:2009-09-10* 修改人:* 修改时间:********************************************************************* ********/bool CConLog::WriteLogTxt(CString time, CString value){//定义写入字符数组CString tmp = time + value;//定义输出流ofstream oFile;oFile.open(m_sFullName.GetBuffer(MAX_PATH),ios::app|ios::binary);oFile.seekp(0,ios::end);//回到文件末尾//写入文件流if (oFile.is_open()){//下面蓝色部分解决了CHAR[]写入的问题,不用再做拷贝了,增加了安全性oFile.write(tmp.GetBuffer(tmp.GetLength()), tmp.GetLength());oFile.write(_T("\r\n"), 2); //写在一起会产生乱码}else{oFile.close();return false;}oFile.close();return true;}/******************************************************************** ********** 写入日志文件* 函数名:WriteLogTxt* 功能写入日志* 说明:* 参数:* 创建人:fjf* 创建时间:2009-09-09* 修改人:* 修改时间:********************************************************************* ********/bool CConLog::WriteLogTxt(CString key, CString time, CString value) {//读写文件全名if (m_sFullName == _T("")){AfxMessageBox("请设置日志保存路径!");return FALSE;}//操作文件try{this->m_sfFile.Open(m_sFullName,CFile::modeCreate |CFile::modeNoTruncate | CFile::modeWrite);m_sfFile.SeekToEnd();this->m_sfFile.WriteString(time + _T("\r\n"));this->m_sfFile.WriteString(value + _T("\r\n"));this->m_sfFile.Close();}catch (CFileException &e){CString error;error.Format(_T("%d"),e.m_cause);AfxMessageBox(_T("无法写入文件!错误码:" + error));return false;}return true;}/******************************************************************** ********** 写入日志文件-C++标准版(UNICODE)* 函数名:WriteLogTxt* 功能写入日志* 说明:* 参数:* 创建人:fjf* 创建时间:2009-09-10* 修改人:* 修改时间:********************************************************************* ********/bool CConLog::WriteLogTxt(CString time, CString value){//定义写入字符数组CString tmp = time + value;//定义输出流ofstream oFile;oFile.open(m_sFullName.GetBuffer(MAX_PATH),ios::app|ios::binary);oFile.seekp(0,ios::end);//回到文件末尾//写入文件流if (oFile.is_open()){//下面蓝色部分解决了CHAR[]写入的问题,不用再做拷贝了,增加了安全性oFile.write(tmp.GetBuffer(tmp.GetLength()), tmp.GetLength());oFile.write(_T("\r\n"), 2); //写在一起会产生乱码}else{oFile.close();return false;}oFile.close();return true;}查看文章VC逐行读写日志文件(TXT)2009-11-03 11:52最近写一个日志读写控件的类,发现VC的CSdioFile的WriteString不能处理中文,虽然把字符集改成多字符形式可以解决这个问题,但这就破坏了程序的兼容性。
C#读写文本文件(.txt)的方法实例

C#读写⽂本⽂件(.txt)的⽅法实例读取txt⽂件如果你要读取的⽂件内容不是很多,可以使⽤ File.ReadAllText(filePath) 或指定编码⽅式 File.ReadAllText(FilePath, Encoding)的⽅法。
它们都⼀次性将⽂本内容全部读完,并返回⼀个包含全部⽂本内容的字符串string str1 = File.ReadAllText(@"c:\temp\a.txt");//也可以指定编码⽅式string str2 = File.ReadAllText(@"c:\temp\a.txt", Encoding.ASCII);也可以使⽤⽅法File.ReadAllLines,该⽅法⼀次性读取⽂本内容的所有⾏,返回⼀个字符串数组,数组元素是每⼀⾏的内容string[] strs1 = File.ReadAllLines(@"c:\temp\a.txt");// 也可以指定编码⽅式string[] strs2 = File.ReadAllLines(@"c:\temp\a.txt", Encoding.ASCII);当⽂本的内容⽐较⼤时,我们就不要将⽂本内容⼀次性读完,⽽应该采⽤流(Stream)的⽅式来读取内容。
.Net为我们封装了StreamReader类,它旨在以⼀种特定的编码从字节流中读取字符。
StreamReader类的⽅法不是静态⽅法,所以要使⽤该类读取⽂件⾸先要实例化该类,在实例化时,要提供读取⽂件的路径。
实例化StreamReader类有很多种⽅式。
下⾯我罗列出⼏种:StreamReader sR1 = new StreamReader(@"c:\temp\a.txt");// 同样也可以指定编码⽅式StreamReader sR2 = new StreamReader(@"c:\temp\a.txt", Encoding.UTF8);FileStream fS = new FileStream(@"C:\temp\a.txt", FileMode.Open, FileAccess.Read, FileShare.None);StreamReader sR3 = new StreamReader(fS);StreamReader sR4 = new StreamReader(fS, Encoding.UTF8);FileInfo myFile = new FileInfo(@"C:\temp\a.txt");// OpenText 创建⼀个UTF-8 编码的StreamReader对象StreamReader sR5 = myFile.OpenText();// OpenText 创建⼀个UTF-8 编码的StreamReader对象StreamReader sR6 = File.OpenText(@"C:\temp\a.txt");初始化完成之后,你可以每次读⼀⾏,也可以每次读⼀个字符,还可以每次读⼏个字符,甚⾄也可以⼀次将所有内容全部读完// 读⼀⾏string nextLine = sR.ReadLine();// 读⼀个字符int nextChar = sR.Read();// 读100个字符int n = 100;char[] charArray = new char[n];int nCharsRead = sR.Read(charArray, 0, n);// 全部读完string restOfStream = sR.ReadToEnd();使⽤完StreamReader之后,不要忘记关闭它: sR.Close();假如我们需要⼀⾏⼀⾏的读,将整个⽂本⽂件读完,下⾯看⼀个完整的例⼦:StreamReader sR = File.OpenText(@"C:\temp\a.txt");string nextLine;while ((nextLine = sR.ReadLine()) != null){Console.WriteLine(nextLine);}sR.Close();写⼊txt⽂件写⽂件和读⽂件⼀样,如果你要写⼊的内容不是很多,可以使⽤File.WriteAllText⽅法来⼀次将内容全部写如⽂件。
vc中读出txt文件数据
在VC++应用程序中读取文本数据我们通常把数据存诸在txt文件上,但是我们通常要把这些数据取出来并进行处理。
下面我将介绍一种在VC++应用程序中读取文本数据的方法。
一。
前言因为经常要处理地质方面的数据。
但是很多数据它不是直接存贮在数据库文件(如Access文件等),而是存贮在txt文件。
经常有同学问我怎么通过编程读取实现文本文件中的数据。
其实存贮在txt文件也有它的好处,不像读取Access文件那样要注册数据源,设置比较麻烦,编写读取程序也比较复杂。
二。
程序原理首先我们知道假如要进行的文件操作只是简单的读写整行的字符串,那么最好使用CStdioFile,用它来进行此类操作非常方便。
因此我们便很自然想到:首先我们把文本文件的每行数据读到一个缓冲区,然后使用sscanf把它转化为字符格式。
那么具体该怎么做呢?比如在一个txt文件里每一行数据格式是这样的:A1 A2 A3 A3 ……An那么读取的主体代码是:CStdioFile File; // 定义一个CStdioFile类变量FileCString FileData; // 定义一个CString,作为一个缓冲区/*定义n个临时字符串变量,大小依据实际情况,这里暂设为10*/char TempStr1[10],TempStr2[10]……TempStrN[10];File.ReadString(FileData); // 将一行数据读到缓冲区/*将该行数据的n个字符读到n个临时字符串变量*/sscanf(FileData,"%s %s %s %s ……%s",TempStr1,TempStr2……TempStrN);这种读法的一个好处是对文本格式要求不严,如下面的格式也可以(前面可有未知个空格) A1 A2 (两个数据之间也可有未知个空格) A3 A3 ……An 三。
编程步骤下面我以一个单文档程序来具体说明我的做法。
该程序的主要功能是读取文本文件的坐标数据,然后在客户区里用直线将这些坐标连起来,并显示。
VC读写txt文件
C++读写文本文件#include <iostream>#include <fstream>using namespace std;int main(){const char filename[] = "mytext.txt";ofstream o_file;ifstream i_file;string out_text;//写o_file.open(filename);for (int i = 1; i <= 10; i++){o_file << "第" << i << "行\n"; //将内容写入到文本文件中}o_file.close();//读i_file.open(filename);if (i_file.is_open()){while (i_file.good()){i_file >> out_text; //将读取的内容存储到变量out_text中cout << out_text << endl; //在控制台输出读取的内容。
为什么最后一行的内容会出现两次}}elsecout << "打开文件:" << filename << " 时出错!";i_file.close();system("PAUSE");return 0;}为什么总会将最后一行显示两遍?我的循环似乎没错呀。
笔记:C++文件的读取和写入exit(1);// terminate with error}if(!outfile){cout<<"Unable to open otfile";exit(1);// terminate with error}int a,b;int i=0,j=0;int data[6][2];while(! myfile.eof()){myfile.getline(buffer,10);sscanf(buffer,"%d %d",&a,&b);cout<<a<<" "<<b<<endl;data[i][0]=a;data[i][1]=b;i++;}myfile.close();for(int k=0;k<i;k++){outfile<<data[k][0]<<" "<<data[k][1]<<endl;cout<<data[k][0]<<" "<<data[k][1]<<endl; }outfile.close();return 0;}无论读写都要包含<fstream>头文件读:从外部文件中将数据读到程序中来处理对于程序来说,是从外部读入数据,因此定义输入流,即定义输入流对象:ifsteam infile,infile就是输入流对象。
CC++读写文本文件、二进制文件的方法
CC++读写⽂本⽂件、⼆进制⽂件的⽅法⼀:⽬的掌握C语⾔⽂本⽂件读写⽅式;掌握C语⾔⼆进制⽂件读写⽅式;掌握CPP⽂本⽂件读写⽅式;掌握CPP⼆进制⽂件读写⽅式;⼆:C语⾔⽂本⽂件读写1. ⽂本⽂件写⼊//采⽤C模式对Txt进⾏写出void TxtWrite_Cmode(){//准备数据int index[50] ;double x_pos[50], y_pos[50];for(int i = 0; i < 50; i ++ ){index[i] = i;x_pos[i] = rand()%1000 * 0.01 ;y_pos[i] = rand()%2000 * 0.01;}//写出txtFILE * fid = fopen("txt_out.txt","w");if(fid == NULL){printf("写出⽂件失败!\n");return;}for(int i = 0; i < 50; i ++ ){fprintf(fid,"%03d\t%4.6lf\t%4.6lf\n",index[i],x_pos[i],y_pos[i]);}fclose(fid);}2. ⽂本⽂件读取//采⽤C模式对Txt进⾏读取void TxtRead_Cmode(){FILE * fid = fopen("txt_out.txt","r");if(fid == NULL){printf("打开%s失败","txt_out.txt");return;}vector<int> index;vector<double> x_pos;vector<double> y_pos;int mode = 1;printf("mode为1,按字符读⼊并输出;mode为2,按⾏读⼊输出;mode为3,知道数据格式,按⾏读⼊并输出\n");scanf("%d",&mode);if(mode == 1){//按字符读⼊并直接输出char ch; //读取的字符,判断准则为ch不等于结束符EOF(end of file)while(EOF!=(ch= fgetc(fid)))printf("%c", ch);}else if(mode == 2){char line[1024];memset(line,0,1024);while(!feof(fid)){fgets(line,1024,fid);printf("%s\n", line); //输出}}else if(mode == 3){//知道数据格式,按⾏读⼊并存储输出int index_tmp;double x_tmp, y_tmp;while(!feof(fid)){fscanf(fid,"%d%lf%lf\n",&index_tmp, &x_tmp, &y_tmp);index.push_back(index_tmp);x_pos.push_back(x_tmp);y_pos.push_back(y_tmp);}for(int i = 0; i < index.size(); i++)printf("%04d\t%4.8lf\t%4.8lf\n",index[i], x_pos[i], y_pos[i]);}fclose(fid);}三:C语⾔⼆进制⽂件读写1. ⼆进制⽂件写⼊//采⽤C模式写⼆进制⽂件void DataWrite_CMode(){//准备数据double pos[200];for(int i = 0; i < 200; i ++ )pos[i] = i ;//写出数据FILE *fid;fid = fopen("binary.dat","wb");if(fid == NULL){printf("写出⽂件出错");return;}int mode = 1;printf("mode为1,逐个写⼊;mode为2,逐⾏写⼊\n");scanf("%d",&mode);if(1==mode){for(int i = 0; i < 200; i++)fwrite(&pos[i],sizeof(double),1,fid);}else if(2 == mode){fwrite(pos, sizeof(double), 200, fid);}fclose(fid);}2.⼆进制⽂件读取//采⽤C模式读⼆进制⽂件void DataRead_CMode(){FILE *fid;fid = fopen("binary.dat","rb");if(fid == NULL){printf("读取⽂件出错");return;}int mode = 1;printf("mode为1,知道pos有多少个;mode为2,不知道pos有多少个\n"); scanf("%d",&mode);if(1 == mode){double pos[200];fread(pos,sizeof(double),200,fid);for(int i = 0; i < 200; i++)printf("%lf\n", pos[i]);free(pos);}else if(2 == mode){//获取⽂件⼤⼩fseek (fid , 0 , SEEK_END);long lSize = ftell (fid);rewind (fid);//开辟存储空间int num = lSize/sizeof(double);double *pos = (double*) malloc (sizeof(double)*num);if (pos == NULL){printf("开辟空间出错");return;}fread(pos,sizeof(double),num,fid);for(int i = 0; i < num; i++)printf("%lf\n", pos[i]);free(pos); //释放内存}fclose(fid);}四:C++⽂本⽂件读写1. ⽂本⽂件写⼊//采⽤CPP模式写txtvoid TxtWrite_CPPmode(){//准备数据int index[50] ;double x_pos[50], y_pos[50];for(int i = 0; i < 50; i ++ ){index[i] = i;x_pos[i] = rand()%1000 * 0.01 ;y_pos[i] = rand()%2000 * 0.01;}//写出txtfstream f("txt_out.txt", ios::out);if(f.bad()){cout << "打开⽂件出错" << endl;return;}for(int i = 0; i < 50; i++)f << setw(5) << index[i] << "\t" << setw(10) << x_pos[i] <<"\t" <<setw(10)<< y_pos[i] << endl;f.close();}2.⽂本⽂件读取//采⽤CPP模式读取txtvoid TextRead_CPPmode(){fstream f;f.open("txt_out.txt",ios::in);//⽂件打开⽅式选项:// ios::in = 0x01, //供读,⽂件不存在则创建(ifstream默认的打开⽅式)// ios::out = 0x02, //供写,⽂件不存在则创建,若⽂件已存在则清空原内容(ofstream默认的打开⽅式)// ios::ate = 0x04, //⽂件打开时,指针在⽂件最后。
CSharp读写txt文件的两种方法介绍
1.添加命名空间System.IO;System.Text;2.文件的读取(1).使用FileStream类进行文件的读取,并将它转换成char数组,然后输出。
byte[] byData = new byte[100];char[] charData = new char[1000];public void Read(){try{FileStream file = new FileStream("E:\\test.txt", FileMode.Open);file.Seek(0, SeekOrigin.Begin);file.Read(byData, 0, 100); //byData传进来的字节数组,用以接受FileStream对象中的数据,第2个参数是字节数组中开始写入数据的位置,它通常是0,表示从数组的开端文件中向数组写数据,最后一个参数规定从文件读多少字符.Decoder d = Encoding.Default.GetDecoder();d.GetChars(byData, 0, byData.Length, charData, 0);Console.WriteLine(charData);file.Close();}catch (IOException e){Console.WriteLine(e.ToString());}}(2).使用StreamReader读取文件,然后一行一行的输出。
public void Read(string path){StreamReader sr = new StreamReader(path,Encoding.Default);String line;while ((line = sr.ReadLine()) != null){Console.WriteLine(line.ToString());}}3.文件的写入(1).使用FileStream类创建文件,然后将数据写入到文件里。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
利用CStdioFile类的直接读取字符串的特点,大大简化程序的开发。
要调用CStdioFile类需要在程序中加载afx.h库文件。
一。
用VC6.0生成基于对话框的程序ReadTxT工程。
二。
添加两个按钮“Open File”和“Save File”。
一个CLisiBox列表框。
三。
为两个按钮添加消息相应函数,程序如下:
void CReadTXTTestDlg::OnOpenFile()
{
CFileDialog FileDlg(true, _T("txt"), NULL,
OFN_FILEMUSTEXIST|OFN_HIDEREADONLY,
"文本文件(*.TXT)|*.TXT|All Files(*.*)|*.*||");
if( FileDlg.DoModal() == IDOK ) {
CString fileName; fileName = FileDlg.GetFileName();
CStdioFile file;
file.Open(fileName,CFile::modeRead,0);
CListBox *pList = (CListBox *)GetDlgItem(IDC_EDIT);
pList->ResetContent();
CString str;
while(file.ReadString(str)) {
pList->AddString(str);
}
file.Close();
}
}
void CReadTXTTestDlg::OnSaveFile()
{
CFileDialog FileDlg(false,
_T("txt"), NULL, OFN_FILEMUSTEXIST|OFN_HIDEREADONLY, "文本文件(*.TXT)|*.TXT|All Files(*.*)|*.*||");
if( FileDlg.DoModal() == IDOK ) {
CString fileName;
fileName = FileDlg.GetFileName();
CStdioFile file;
file.Open(fileName,CFile::modeCreate | CFile::modeWrite);
CListBox *pList = (CListBox *)GetDlgItem(IDC_EDIT);
CString str;
int size = pList->GetCount();
for(int i=0; i<size;i++) {
int n = pList->GetTextLen(i);
pList->GetText(i, str.GetBuffer(n));
file.WriteString(str);
file.WriteString("\n");
}
file.Close();
}
}
四。
编译执行,程序的运行结果如下:
点击“OpenFile”按钮可实现TXT文件的加载。
点击“SaveFile”按钮可实现TXT文件的存储加载。
此程序在WINXP平台,VC6.0编译系统调试通过。