C++写入文本文件

合集下载

c语言文件读写大全

c语言文件读写大全

c语⾔⽂件读写⼤全对⽂件的读和写是最常⽤的⽂件操作。

在C语⾔中提供了多种⽂件读写的函数:1. 字符读写函数:fgetc和fputc2. 字符串读写函数:fgets和fputs3. 数据块读写函数:freed和fwrite4. 格式化读写函数:fscanf和fprinf下⾯分别予以介绍。

使⽤以上函数都要求包含头⽂件stdio.h。

字符读写函数fgetc和fputc字符读写函数是以字符(字节)为单位的读写函数。

每次可从⽂件读出或向⽂件写⼊⼀个字符。

1) 读字符函数fgetcfgetc函数的功能是从指定的⽂件中读⼀个字符,函数调⽤的形式为:字符变量=fgetc(⽂件指针);例如:ch=fgetc(fp);其意义是从打开的⽂件fp中读取⼀个字符并送⼊ch中。

对于fgetc函数的使⽤有以下⼏点说明:在fgetc函数调⽤中,读取的⽂件必须是以读或读写⽅式打开的。

读取字符的结果也可以不向字符变量赋值。

例如:fgetc(fp); 但是读出的字符不能保存。

在⽂件内部有⼀个位置指针。

⽤来指向⽂件的当前读写字节。

在⽂件打开时,该指针总是指向⽂件的第⼀个字节。

使⽤fgetc 函数后,该位置指针将向后移动⼀个字节。

因此可连续多次使⽤fgetc函数,读取多个字符。

应注意⽂件指针和⽂件内部的位置指针不是⼀回事。

⽂件指针是指向整个⽂件的,须在程序中定义说明,只要不重新赋值,⽂件指针的值是不变的。

⽂件内部的位置指针⽤以指⽰⽂件内部的当前读写位置,每读写⼀次,该指针均向后移动,它不需在程序中定义说明,⽽是由系统⾃动设置的。

【例13-1】读⼊⽂件c1.doc,在屏幕上输出。

1. #include<stdio.h>2. main(){3. FILE *fp;4. char ch;5. if((fp=fopen("d:\\jrzh\\example\\c1.txt","rt"))==NULL){6. printf("\nCannot open file strike any key exit!");7. getch();8. exit(1);9. }10. ch=fgetc(fp);11. while(ch!=EOF){12. putchar(ch);13. ch=fgetc(fp);14. }15. fclose(fp);16. }本例程序的功能是从⽂件中逐个读取字符,在屏幕上显⽰。

c语言文件操作(主要打开方式的区别)

c语言文件操作(主要打开方式的区别)

文件使用方式1.文件使用方式“rt” 只读打开一个文本文件,只允许读数据“wt” 只写打开或建立一个文本文件,只允许写数据“at” 追加打开一个文本文件,并在文件末尾写数据“rb” 只读打开一个二进制文件,只允许读数据“wb” 只写打开或建立一个二进制文件,只允许写数据“ab” 追加打开一个二进制文件,并在文件末尾写数据“rt+” 读写打开一个文本文件,允许读和写“wt+” 读写打开或建立一个文本文件,允许读写“at+” 读写打开一个文本文件,允许读,或在文件末追加数据“rb+” 读写打开一个二进制文件,允许读和写“wb+” 读写打开或建立一个二进制文件,允许读和写“ab+” 读写打开一个二进制文件,允许读,或在文件末追加数据注意:对于文本文件的操作,我们可以“r”,“w”,“a”,“a+”不需要加字母t也可以的2.以打开文本文件的操作来说明如果我们所要创建的文件已经存在,不同的方式会有不同的效果:A: 用fopen("file.txt","a+")a+ 以附加方式打开可读写的文件。

若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。

B:用fopen(”test.txt”,”w+”)//test.txt为你要打开的文件名,“w+”表示假如文件不存在则会创建,假如文件存在则会替代3.下面详细总结下:字符串含义"r" 以只读方式打开文本文件"w" 以只写方式打开文本文件,已存在的将被覆盖"a" 以只写方式打开文本,指针指向文件尾,原文件保留"+" 与上面的字符串组合,表以读写方式打开(还有这个)"b" 与上面的字符串组合,表打开二进制文件说明:纯属个人整理,如有雷同,纯属巧合,希望对大家有所帮助哈!!!。

C语言读写文件两种方式ASCII和二进制。

C语言读写文件两种方式ASCII和二进制。

C语⾔读写⽂件两种⽅式ASCII和⼆进制。

C语⾔读写⽂件有两种⽅式ASCII 和⼆进制。

现在举例说明:内存中的字符或字符串都是⽂本模式(unicode编码存储,统⼀长度,定长码,⽅便)内存中的其他变量都是以⼆进制编码存储程序的代码以⽂本模式ASCII码⽅式存储1.在windows系统中,⽂本模式下,⽂件以" \r\n"代表换⾏。

若以⽂本模式打开⽂件,并⽤fputs等函数写⼊换⾏符"\n"时,函数会⾃动在"\n"前⾯加上"\r"。

即实际写⼊⽂件的是"\r\n" 。

读取的时候⾃动去掉\r,将\n写⼊内存。

2.在类Unix/Linux系统中⽂本模式下,⽂件以"\n"代表换⾏。

所以Linux系统中在⽂本模式和⼆进制模式下并⽆区别。

注:Windows 采⽤ \r\n 是有原因的,Windows 采⽤了传统的英⽂打字机的模式。

想想看英⽂打字机是如何换⾏的呢?英⽂打字机是选择将⼩车退回⾄起点,这个过程称为回车(carriage return, CR),随后把⼩车调⾄下⼀⾏的位置,这个过程称为换⾏(line feed, LF),这样就完成了英⽂打字机中换⾏过程。

回车(CR)在计算机中使⽤ ASCII 为 13 的字符来表⽰,换⾏(LF)使⽤ASCII 为 10 的字符来表⽰。

这也就是 Windows 的换⾏采⽤ \r\n 来表⽰的原因。

3.当⽤⼆进制模式读取windows下代表换⾏的\r\n时,不能⾃动去掉\r,这样读⼊内存的数据多了⼀个‘\r’,造成跟在‘\r’后⾯的⼆进制位右移,读取必然会出错!4.如果在⽂件中读到0x1B,⽂本模式会认为这是⽂件结束符,也就是⼆进制模型不会对⽂件进⾏处理,⽽⽂本⽅式会按⼀定的⽅式对数据作相应的转换。

5.⽤⽂本模式写⽂件,读取时也要⽤⽂本模式,⼆进制模式同样。

c语言中文本文件操作的主要函数

c语言中文本文件操作的主要函数

c语言中文本文件操作的主要函数在C语言中,文本文件操作是我们必须了解的一个重要方面。

我们经常需要读取或写入文本文件来存储或读取数据,因此掌握文本文件操作函数非常重要。

下面是C语言中常用的文本文件操作函数:1. fopen()fopen()函数用于打开一个文件并返回一个指向该文件的文件指针。

它需要两个参数:文件名和打开模式。

打开模式可以是读、写或追加等模式。

例如,打开文件进行读取操作的模式为“r”,写入操作的模式为“w”,追加操作的模式为“a”。

2. fclose()fclose()函数用于关闭打开的文件。

它需要一个参数:指向文件的文件指针。

关闭文件时必须使用fclose()函数,否则会导致内存泄漏和数据损坏。

3. fgetc()和fgets()fgetc()函数用于从打开的文件中读取一个字符,fgets()函数用于从打开的文件中读取一行文本。

它们的参数都是文件指针和一个字符数组,确定要读取的最大字符数。

例如,fgets(fp, 100, file)将从文件指针fp指向的文件中读取最多100个字符。

4. fputc()和fputs()fputc()函数用于向文件中写入一个字符,fputs()函数用于向文件中写入一行文本。

它们的参数都是一个字符或一个字符串,和文件指针,它们将字符或字符串写入文件中。

5. fprintf()和fscanf()fprintf()函数用于将数据格式化后写入文件中,fscanf()函数用于从文件中读取已格式化的数据。

格式化字符串由控制字符和占位符组成,告诉函数要格式化的数据类型和如何输出。

例如,fprintf(fp, "%d", num)将整数num以字符形式写入fp指向的文件。

6. fseek()fseek()函数用于将文件指针定位到文件中任何指定的位置。

它需要三个参数:文件指针,距离文件开始位置的偏移量和定位方式(开始、当前或结尾)。

例如,fseek(file, 5, SEEK_SET)将把文件指针设置到文件的第6个位置。

C语言对文件的输入输出

C语言对文件的输入输出

字符一律以ASCII形式存储,数值型数据既可以用ASCII形式存储,也可以用二进制形式存储。
内存中存储形式 00000000 00000000 00100111 00010000
ASCII形式
00110001 00110000 00110000 00110000 00110000
(1)
(0)
(0)
(0)
其实,带b和不带b只有一个区别,即对换行的处理。由于在C语言用一个′\n′即可实现换行,而在Windows系统中为
实现换行必须要用 “回车”和“换行”两个字符,即′\r′和′\n′。因此,如果使用的是文本文件并且用“w”方式打开,在向文
件输出时,遇到换行符′\n′时,系统就把它转换为′\r′和′\n′两个字符,否则在Windows系统中查看文件时,各行连成
第10章
C语言对文件的输入输出
C文件的有关基本知识
什么是文件
文件有不同的类型,在程序设计中,主要用到两种文件: (1) 程序文件。包括源程序文件(后缀为.c)、目标文件(后缀为.obj)、可执行文件(后缀为.exe)等。这种文件 的内容是程序代码。 (2) 数据文件。文件的内容不是程序,而是供程序运行时读写的数据,如在程序运行过程中输出到磁盘 (或其他外部设备)的数据,或在程序运行过程中供读入的数据。如一批学生的成绩数据、货物交易的数 据等。
typedef struct
{ short level;
//缓冲区“满”或“空”的程度
unsigned flags;
//文件状态标志
char fd;
//文件描述符
unsigned char hold; //如缓冲区无内容不读取字符
short bsize;

CC++关于文件的读写操作以及文件的打开和保存

CC++关于文件的读写操作以及文件的打开和保存

CC++关于⽂件的读写操作以及⽂件的打开和保存通过近来的学习,总结⼀下关于⽂件的读写操作以及⽂件的打开和保存的⽅法。

⼀、⽂件的读写操作:(1)C语⾔对⽂件的读写操作在C语⾔中,对⽂件的读写操作是⽤FILE结构体和常⽤的对⽂件操作的函数实现的,下⾯总结⼀下C语⾔中对⽂件操作的常⽤函数:fopen() 打开以⽂件名指定的⽂件fwrite() 写⽂件fread() 读⽂件fseek() 移动⽂件的指针到新的位置通过该函数的参数设定的偏移量和初始位置rewind() 移动⽂件的指针到⽂件流的开始位置,在通常情况下可⽤fseek()实现相同的功能,但⼆者有区别ftell() 获得当前⽂件指针的位置,常⽤该函数获得⽂件的⽂件流的长度fflush() 刷新缓冲区中的内容,当⽂件写⼊时直接将⽂件流的内容从缓冲区写⼊磁盘,当读取⽂件时直接将磁盘⽂件写⼊缓冲区,⽽不必等程序运⾏结束或关闭程序。

fclose() 关闭⽂件memset() 在⼀段内存块中填充某个给定的值⽰例代码如下:/*********************************************************** C语⾔实现⽂件写操作 ************************************************************/FILE *pFile=fopen("CLanguage.txt","w");fwrite("CLanguage",1,strlen("CLanguage"),pFile);//fseek(pFile,0,SEEK_SET);//fwrite("实现⽂件写操作",1,strlen("实现⽂件写操作"),pFile);fclose(pFile);/*********************************************************** C语⾔实现⽂件读操作 ************************************************************/FILE *pFile=fopen("CLanguage.txt","r");//char ch[100];//memset(ch,0,100);//fread(ch,1,100,pFile);//MessageBox(ch);char* pBuf;int length;fseek(pFile,0,SEEK_END);length=ftell(pFile);pBuf=new char[length+1];//fseek(pFile,0,SEEK_SET);rewind(pFile);fread(pBuf,1,length,pFile);pBuf[length]=0;MessageBox(pBuf);fclose(pFile);注意:在⽤C语⾔实现⽂件的读操作时,要注意⽂件的指针位置。

c语言循环覆盖写文件

c语言循环覆盖写文件

好的,我可以为您提供一个使用C语言循环覆盖写文件的示例代码,字数为1500字。

首先,我们需要了解一些基本概念和数据结构,例如文件操作、循环结构和指针。

然后,我们将编写一个简单的程序,该程序使用循环来覆盖文件中的现有内容,并写入新的文本。

下面是一个简单的示例代码:```c#include <stdio.h>#include <stdlib.h>int main() {FILE *fp;char filename[] = "output.txt";char content[100];int i, count = 0;// 打开文件以进行写入fp = fopen(filename, "w");if (fp == NULL) {printf("无法打开文件%s\n", filename);exit(1);}// 循环覆盖文件内容并写入新的文本while (count < 10) {printf("请输入要写入文件的新文本(最多10个字符):");scanf("%s", content);fprintf(fp, "%s\n", content);count++;}// 关闭文件fclose(fp);printf("文件已成功覆盖并写入新文本。

\n");return 0;}```在这个示例中,我们首先定义了一个文件指针`fp`,用于打开和操作文件。

我们还定义了一个字符串数组`content`,用于存储用户输入的新文本。

我们还定义了一个计数器`count`,用于循环覆盖文件内容并写入新文本。

最后,我们使用`fopen()`函数打开文件以进行写入操作,并检查是否成功打开文件。

如果打开失败,则输出错误消息并退出程序。

接下来,我们使用一个循环来多次覆盖文件内容并写入新文本。

深入C语言把文件读入字符串以及将字符串写入文件的解决方法

深入C语言把文件读入字符串以及将字符串写入文件的解决方法

深⼊C语⾔把⽂件读⼊字符串以及将字符串写⼊⽂件的解决⽅法复制代码代码如下:FILE *fp;if ((fp = fopen("example.txt", "rb")) == NULL){exit(0);}fseek(fp, 0, SEEK_END);int fileLen = ftell(fp);char *tmp = (char *) malloc(sizeof(char) * fileLen);fseek(fp, 0, SEEK_SET);fread(tmp, fileLen, sizeof(char), fp);fclose(fp);for(int i = 0; i < fileLen; ++i){printf("%d ", tmp[i]);}printf("\n");if ((fp = fopen("example.txt", "wb")) == NULL){exit(0);}rewind(fp);fwrite(tmp, fileLen, sizeof(char), fp);fclose(fp);free(tmp);CFile需要包含的头⽂件为Afx.hif(!(fp.Open((LPCTSTR)m_strsendFilePathName,CFile::modeRead)))modeReadmodeWritemodeReadWritemodeCreatetypeBinarytypeText读写⾮⽂本⽂件⼀定要⽤typeBinaryvirtual UINTRead(void*lpbuf, UINT nCount);复制代码代码如下:CFile fp;if(!(fp.Open((LPCTSTR)m_strsendFilePathName,CFile::modeRead))){return;}fp.SeekToEnd();unsignedint fpLength = fp.GetLength();char *tmp= new char[fpLength];fp.SeekToBegin(); //这⼀句必不可少if(fp.Read(tmp,fpLength) < 1){fp.Close();return;}// 新建⽂件并写⼊复制代码代码如下:if(!(fp.Open((LPCTSTR)m_strsendFilePathName,CFile::modeCreate | CFile::modeWrite |CFile::typeBinary))) {return;}fp.SeekToBegin();fp.write(tmp,fpLength);fp.close;。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

『转』C++写入文本文件2010-01-09 12:14对于文件输入,C++使用类似于cout的东西。

下面来复习一些有关将cout用于控制台输出的基本事实,为文件输入做准备:● 必须包含头文件iostream。

● 头文件iostream定义了一个用处理输出的ostream类。

● 头文件iostream声明了一个名为cout的ostream变量(对象)。

● 必须指明名称空间std:例如,为引用元素cout和endl,必须使用编译指令using或前缀std::。

● 可以结合使用cout和操作符“>>”来显示各种类型的数据。

文件输出与此极其相似:● 必须包含头文件fstream。

● 需要声明一个或多个ofstream变量(对象),并以自己喜欢的方式对其进行命名,条件是遵守常用的命名规则。

● 必须指明名称空间std:例如,为引用元素ofstream,必须使用编译指令using或前缀std::。

● 需要将ofstream对象与文件关联起来。

为此,方法之一是使用open()方法。

● 使用完文件后,应使用close()方法将其关闭。

● 可结合使用ofstream对象和操作符>>来输出各种类型的数据。

注意,虽然头文件iostream提供了一个预先定义好的名为cout的ostream 对象,但您必须声明自己的ofstream对象,为其命名,并将其同文件关联起来。

下面演示了如何声明这种对象。

ofstream outFile; //outFile an ofstream objectofstream fount; //fout an ofstream object下面演示了如何将这种对象与特定的文件关联起来:outFile.open("fish.txt"); //outFile used to write to the fish.txt filechar filename[50];cin >> filename; //user specifies a namefout.open(filename); //fout used to read specified file注意,方法open()接受一个C-风格字符串作为参数,这可以是一个字面字符串,也可以是存储在数组中的字符串。

下面演示了如何使用这种对象:double wt = 125.8;outFile << wt; //write a number to fish.txtchar line[81] = "Objects are closer than they appear.";fin << line << endl; //write a line of text重要的是,声明一个ofstream对象并将其同文件关联起来后,便可以像使用cout那样使用它。

所有可用于cout的操作和方法(如<<、enld和setf())都可用于ofstream对象(如前述范例中的outFile和fout)。

总之,使用文件输出的主要步骤如下:1. 包含头文件fstream。

2. 创建一个ofstream对象。

3. 将该ofstream对象同一个文件关联起来。

4. 就像使用count那样使用该ofstream对象。

程序清单6.15中的程序演示了这种方法。

它要求用户输入信息,然后将信息显示到屏幕上,再将这些信息写入到文件中。

读者可以使用文本编辑器来查看该输出文件的内容。

程序清单6.15 outfile.cpp//outfile.cpp -- writing to a file#include <iostream>#include <fstream>int main() {using namespace std;char automobile[50];int year;double a_price;double d_price;ofstream outFile; //create object for outputoutFile.open("carinfo.txt"); //associate with a filecout << "Enter the make and model of automobile:";cin.getline(automobile, 50);cout << "Enter the model year:";cin >> year;cout << "Enter the original asking price:";cin >> a_price;d_price = 0.913 * a_price;// display information on screen with countcout << fixed;cout.precision(2);cout.setf(ios_base::showpoint);cout << "Make and model:" << automobile << endl;cout << "Year:" << year << endl;cout << "Was asking $" << a_price << endl;cout << "Now asking $" << d_price << endl;// now do exact same things using outFile instead of coutoutFile << fixed;outFile.precision(2);outFile.setf(ios_base::showpoint);outFile << "Make and model:" << automobile << endl;outFile << "Year:" << year << endl;outFile << "Was asking $" << a_price << endl;outFile << "Now asking $" << d_price << endl;outFile.close(); //done with filereturn 0;}该程序的最后一部分与cout部分相同,只是将cout替换为outFile而已。

下面是该程序的运行情况:Enter the make and model of automobile: Flitz PinataEnter the model year: 2001Enter the original asking price :28576Make and model: Flitz PinataYear: 2001Was asking $28576.00Now asking $26089.89屏幕输出的是使用cout的结果。

如果您查看该程序的可执行文件所在的目录,将看到一个名为carinfo.txt的新文件,其中包含使用outFile生成的输出。

程序说明在程序清单6.15的程序中,声明一个ofstream对象后,便可以使用方法open()来将该对象同一个特定的文件关联起来:ofstream outFile; //create object for outputoutFile.open("carinfo.txt"); //associate with a file 程序使用完该文件后,应该将其关闭:outFile.close();注意,方法close()不需要使用文件名作为参数,这是因为outFile已经同特定的文件关联起来了。

如果您忘记关闭文件,程序正常终止时将自动关闭它。

outFile可使用cout可使用的任何方法。

它不但能够使用操作符<<,还可以使用各种格式化方法,如setf()和precision()。

这些方法只影响调用它们的对象。

例如,对于不同的对象,可以提供不同的值:cout.precision(2); //use a precision of 2 for the displayoutFile.porecision(4); //use a precision of 4 for file output读者需要记住的重点是,创建好ofstream对象(如outFile)后,便可以像使用cout那样使用它。

回到open()方法:outFile.open("carinfo.txt");在这里,该程序运行之前,文件carinfo.txt并不存在。

在这种情况下,方法open()将新建一个名为carinfo.txt的文件。

如果在此运行该程序,文件carinfo.txt将存在,此时情况将如何呢?默认情况下,open()将首先截断该文件,即将其长度截短到零——丢其原有的内容,然后将新的输出加入到该文件中。

第17章将介绍如何修改这种默认行为。

警告:打开已有的文件,以接受输出时,默认将它其长度截短为零,因此原来的内容将丢失。

打开文件用于接受输入时可能失败。

例如,指定的文件可能已存在,但禁止对其进行访问。

因此细心的程序员将检查打开文件的操作是否成功,这将在下一个例子中介绍。

相关文档
最新文档