搜档网
当前位置:搜档网 › C++文件的读写

C++文件的读写

C++文件的读写
C++文件的读写

一、ASCII 输出

为了使用下面的方法, 你必须包含头文件(译者注:在标准C++中,已经使用取代< fstream.h>,所有的C++标准头文件都是无后缀的。)。这是的一个扩展集, 提供有缓冲的文件输入输出操作. 事实上, 已经被包含了, 所以你不必包含所有这两个文件, 如果你想显式包含他们,那随便你。我们从文件操作类的设计开始, 我会讲解如何进行ASCII I/O操作。如果你猜是"fstream," 恭喜你答对了!但这篇文章介绍的方法,我们分别使用"ifstream"?和"ofstream" 来作输入输出。

如果你用过标准控制台流"cin"?和"cout," 那现在的事情对你来说很简单。我们现在开始讲输出部分,首先声明一个类对象。

ofstream fout; 这就可以了,不过你要打开一个文件的话, 必须像这样调用ofstream::open()。

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"; 现在保存文件,你必须关闭文件,或者回写文件缓冲. 文件关闭之后就不能再操作了, 所以只有在你不再操作这个文件的时候才调用它,它会自动保存文件。回写缓冲区会在保持文件打开的情况下保存文件, 所以只要有必要就使用它。回写看起来像另一次输出, 然后调用方法关闭。像这样:

fout << flush; fout.close(); 现在你用文本编辑器打开文件,内容看起来是这样:

Here is a number: 150 Now here is a string: John Doe 很简单吧! 现在继续文件输入, 需要一点技巧, 所以先确认你已经明白了流操作,对"<<" 和">>" 比较熟悉了, 因为你接下来还要用到他们。继续…

二、ASCII 输入

输入和"cin" 流很像. 和刚刚讨论的输出流很像, 但你要考虑几件事情。在我们开始复杂的内容之前, 先看一个文本:

12 GameDev 15.45 L This is really awesome! 为了打开这个文件,你必须创建一个in-stream 对象,?像这样。

ifstream fin("input.txt"); 现在读入前四行. 你还记得怎么用"<<" 操作符往流里插入变量和符号吧?好,?在"<<" (插入)?操作符之后,是">>" (提取) 操作符. 使用方法是一样的. 看这个代码片段.

int number;

float real;

char letter, word[8];

fin >> number; fin >> word; fin >> real; fin >> letter; 也可以把这四行读取文件的代码写为更简单的一行。

fin >> number >> word >> real >> letter; 它是如何运作的呢? 文件的每个空白之后, ">>" 操作符会停止读取内容, 直到遇到另一个>>操作符. 因为我们读取的每一行都被换行符分割开(是空白字符), ">>" 操作符只把这一行的内容读入变量。这就是这个代码也能正常工作的原因。但是,可别忘了文件的最后一行。

This is really awesome! 如果你想把整行读入一个char数组, 我们没办法用">>"?操作符,因为每个单词之间的空格(空白字符)会中止文件的读取。为了验证:

char sentence[101]; fin >> sentence; 我们想包含整个句子, "This is really awesome!" 但是因为空白, 现在它只包含了"This". 很明显, 肯定有读取整行的方法, 它就是getline()。这就是我们要做的。

fin.getline(sentence, 100); 这是函数参数. 第一个参数显然是用来接受的char数组. 第二个参数是在遇到换行符之前,数组允许接受的最大元素数量. 现在我们得到了想要的结果:“This is really awesome!”。

你应该已经知道如何读取和写入ASCII文件了。但我们还不能罢休,因为二进制文件还在等着我们。

三、二进制输入输出

二进制文件会复杂一点, 但还是很简单的。首先你要注意我们不再使用插入和提取操作符(译者注:<< 和>> 操作符). 你可以这么做,但它不会用二进制方式读写。你必须使用read() 和write() 方法读取和写入二进制文件. 创建一个二进制文件, 看下一行。

ofstream fout("file.dat", ios::binary); 这会以二进制方式打开文件, 而不是默认的ASCII模式。首先从写入文件开始。函数write() 有两个参数。第一个是指向对象的char类型的指针, 第二个是对象的大小(译者注:字节数)。为了说明,看例子。

int number = 30; fout.write((char *)(&number), sizeof(number)); 第一个参数写做"(char *)(&number)". 这是把一个整型变量转为char *指针。如果你不理解,可以立刻翻阅C++的书籍,如果有必要的话。第二个参数写作"sizeof(number)". sizeof() 返回对象大小的字节数. 就是这样!

二进制文件最好的地方是可以在一行把一个结构写入文件。如果说,你的结构有12个不同的成员。用ASCII?文件,你不得不每次一条的写入所有成员。但二进制文件替你做好了。看这个。

struct OBJECT { int number; char letter; } obj;

obj.number = 15;

obj.letter = ‘M’;

fout.write((char *)(&obj), sizeof(obj)); 这样就写入了整个结构! 接下来是输入. 输入也很简

单,因为read()?函数的参数和write()是完全一样的, 使用方法也相同。

ifstream fin("file.dat", ios::binary); fin.read((char *)(&obj), sizeof(obj)); 我不多解释用法, 因为它和write()是完全相同的。二进制文件比ASCII文件简单, 但有个缺点是无法用文本编辑器编辑。接着, 我解释一下ifstream 和ofstream 对象的其他一些方法作为结束.

四、更多方法

我已经解释了ASCII文件和二进制文件, 这里是一些没有提及的底层方法。

检查文件

你已经学会了open() 和close() 方法, 不过这里还有其它你可能用到的方法。

方法good() 返回一个布尔值,表示文件打开是否正确。

类似的,bad() 返回一个布尔值表示文件打开是否错误。如果出错,就不要继续进一步的操作了。

最后一个检查的方法是fail(), 和bad()有点相似, 但没那么严重。

读文件

方法get() 每次返回一个字符。

方法ignore(int,char) 跳过一定数量的某个字符, 但你必须传给它两个参数。第一个是需要跳过的字符数。第二个是一个字符, 当遇到的时候就会停止。例子,

fin.ignore(100, ‘\n’); 会跳过100个字符,或者不足100的时候,跳过所有之前的字符,包括‘\n’。

方法peek() 返回文件中的下一个字符, 但并不实际读取它。所以如果你用peek() 查看下一个字符, 用get() 在peek()之后读取,会得到同一个字符, 然后移动文件计数器。

方法putback(char) 输入字符, 一次一个, 到流中。我没有见到过它的使用,但这个函数确实存在。

写文件

只有一个你可能会关注的方法.?那就是put(char), 它每次向输出流中写入一个字符。

打开文件

当我们用这样的语法打开二进制文件:

ofstream fout("file.dat", ios::binary); "ios::binary"是你提供的打开选项的额外标志. 默认的, 文件以ASCII方式打开, 不存在则创建, 存在就覆盖. 这里有些额外的标志用来改变选项。

ios::app 添加到文件尾

ios::ate 把文件标志放在末尾而非起始。

ios::trunc 默认. 截断并覆写文件。

ios::nocreate 文件不存在也不创建。

ios::noreplace 文件存在则失败。

文件状态

我用过的唯一一个状态函数是eof(), 它返回是否标志已经到了文件末尾。我主要用在循环中。例如, 这个代码断统计小写‘e’在文件中出现的次数。

ifstream fin("file.txt");

char ch; int counter;

while (!fin.eof()) {

ch = fin.get();

if (ch == ‘e’) counter++;

}

fin.close(); 我从未用过这里没有提到的其他方法。还有很多方法,但是他们很少被使用。参考C++书籍或者文件流的帮助文档来了解其他的方法。

结论

你应该已经掌握了如何使用ASCII文件和二进制文件。有很多方法可以帮你实现输入输出,尽管很少有人使用他们。我知道很多人不熟悉文件I/O操作,我希望这篇文章对你有所帮助。每个人都应该知道. 文件I/O还有很多显而易见的方法,?例如包含文件. 我更喜欢用流是因为他们更简单。祝所有读了这篇文章的人好运, 也许以后我还会为你们写些东西

无论读写都要包含头文件

读:从外部文件中将数据读到程序中来处理

对于程序来说,是从外部读入数据,因此定义输入流,即定义输入流对象:ifsteam infile,infile 就是输入流对象。

这个对象当中存放即将从文件读入的数据流。假设有名字为myfile.txt的文件,存有两行数字数据,具体方法:

int a,b;

ifstream infile;

infile.open("myfile.txt"); //注意文件的路径

infile>>a>>b; //两行数据可以连续读出到变量里

infile.close()

如果是个很大的多行存储的文本型文件可以这么读:

char buf[1024]; //临时保存读取出来的文件内容

string message;

ifstream infile;

infile.open("myfile.js");

if(infile.is_open()) //文件打开成功,说明曾经写入过东西

{

while(infile.good() && !infile.eof())

{

memset(buf,0,1024);

infile.getline(buf,1204);

message = buf;

...... //这里可能对message做一些操作

cout<

}

infile.close();

}

写:将程序中处理后的数据写到文件当中

对程序来说是将数据写出去,即数据离开程序,因此定义输出流对象ofstream outfile,outfile 就是输出流对象,这个对象用来存放将要写到文件当中的数据。具体做法:

ofstream outfile;

outfile.open("myfile.bat"); //myfile.bat是存放数据的文件名

if(outfile.is_open())

{

outfile<

outfile.close();

}

else

{

cout<<"不能打开文件!"<

}

c++对文件的读写操作的例子

/*/从键盘读入一行字符,把其中的字母依次放在磁盘文件fa2.dat中,再把它从磁盘文件读入程序,

将其中的小写字母改成大写字母,再存入磁盘fa3.dat中*/

#i nclude

#i nclude

#i nclude

using namespace std;

//////////////从键盘上读取字符的函数

void read_save(){

char c[80];

ofstream outfile("f1.dat");//以输出方工打开文件

if(!outfile){

cerr<<"open error!"<

exit(1);

}

cin.getline(c,80);//从键盘读入一行字符

for(int i=0;c[i]!=0;i++) //对字符一个一个的处理,直到遇到'/0'为止

if(c[i]>=65&&c[i]<=90||c[i]>=97&&c[i]<=122){//保证输入的字符是字符outfile.put(c[i]);//将字母字符存入磁盘文件

cout<

}

cout<

outfile.close();

}

void creat_data(){

char ch;

ifstream infile("f1.dat",ios::in);//以输入的方式打开文件

if(!infile){

cerr<<"open error!"<

exit(1);

}

ofstream outfile("f3.dat");//定义输出流f3.dat文件

if(!outfile){

cerr<<"open error!"<

exit(1);

}

while(infile.get(ch)){//当读取字符成功时

if(ch<=122&&ch>=97)

ch=ch-32;

outfile.put(ch);

cout<

}

cout<

infile.close();

outfile.close();

}

int main(){

read_save();

creat_data();

system("pause");

return 0;

}

C语言程序中关于文件的操作

文件操作函数C语言(FILE fputc fgetc fputs fgets fscanf fprintf) 在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别介绍之。 一、流式文件操作 这种方式的文件操作有一个重要的结构FILE,FILE在stdio.h中定义如下:typedef struct{ int level;/*fill/empty level of buffer*/ unsigned flags;/*File status flags*/ char fd;/*File descriptor*/ unsigned char hold;/*Ungetc char if no buffer*/ int bsize;/*Buffer size*/ unsigned char_FAR*buffer;/*Data transfer buffer*/ unsigned char_FAR*curp;/*Current active pointer*/ unsigned istemp;/*Temporary file indicator*/ short token;/*Used for validity checking*/ }FILE;/*This is the FILE object*/ FILE这个结构包含了文件操作的基本属性,对文件的操作都要通过这个结构的指针来进行,此种文件操作常用的函数见下表函数功能 fopen()打开流 fclose()关闭流 fputc()写一个字符到流中 fgetc()从流中读一个字符 fseek()在流中定位到指定的字符 fputs()写字符串到流 fgets()从流中读一行或指定个字符 fprintf()按格式输出到流 fscanf()从流中按格式读取 feof()到达文件尾时返回真值 ferror()发生错误时返回其值 rewind()复位文件定位器到文件开始处 remove()删除文件 fread()从流中读指定个数的字符 fwrite()向流中写指定个数的字符 tmpfile()生成一个临时文件流 tmpnam()生成一个唯一的文件名 下面就介绍一下这些函数 1.fopen() fopen的原型是:FILE*fopen(const char*filename,const char*mode),fopen实现三个功

Linux下C语言的文件读写

Linux下C语言的文件(fputc,fgetc,fwrite,fread对文件读写操 作) //================================== fputc 向文件写入字符 #include #include main() { FILE *fp; char ch; if((fp=fopen("test.txt","w"))==NULL) { printf("不能打开文件\n"); exit(0); } while ((ch=getchar())!='\n') fputc( ch, fp ); fclose(fp); } ------------- 小提示: fp=fopen("test.txt","w") ,把"w"改为"a" 可以创建文件并且追加写入内容 exit(0); 需要包含stdlib.h 头文件,才能使用 //============================================================ fgetc 读取字符 #include #include main( int argc, char *argv[] ) { char ch;

FILE *fp; int i; if((fp=fopen(argv[1],"r"))==NULL) { printf("不能打开文件\n"); exit(0); } while ((ch=fgetc(fp))!=EOF) putchar(ch); fclose(fp); } 文件结尾,通过判断EOF //============================================================== fwrite 的使用 使数组或结构体等类型可以进行一次性读写 #include #include main() { FILE *fp1; int i; struct student{ char name[10]; int age; float score[2]; char addr[15]; }stu; if((fp1=fopen("test.txt","wb"))==NULL) { printf("不能打开文件"); exit(0); } printf("请输入信息,姓名年龄分数1 分数2 地址:\n"); for( i=0;i<2;i++) { scanf("%s %d %f %f %s",https://www.sodocs.net/doc/059128865.html,,&stu.age,&stu.score[0],&stu.score[1], stu.addr);

24c02读写程序大全

24c02读写程序大全 2C总线的应用(24C02子程序) // 对24C02的读、写 // extern void DelayMs(unsigned int); // extern void Read24c02(unsigned char *RamAddress,unsigned char Ro mAddress,unsigned char bytes); // extern void Write24c02(unsigned char *RamAddress,unsigned char Ro mAddress,unsigned char bytes); /***************************************************************************/ #define WriteDeviceAddress 0xa0 #define ReadDviceAddress 0xa1 #include #include #include /***************************************************************************/ sbit SCL=P2^7; sbit SDA=P2^6; bit DOG; /***************************************************************************/ void DelayMs(unsigned int number) { unsigned char temp; for(;number!=0;number--,DOG=!DOG) { for(temp=112;temp!=0;temp--) { } } } /***************************************************************************/ void Start() { SDA=1; SCL=1; SDA=0; SCL=0; } /***************************************************************************/ void Stop() { SCL=0; SDA=0;

c语言文件的读写格式

C程序文件的读写操作 在对文件进行读、写操作之前,首先要解决的问题是如何把程序中要读、写的文件与磁盘上实际的数据文件联系起来。在c语言中,其实这并不困难,只需要用c语言提供的库函数fopen“打开”文件就可以实现这些联系。Fopen函数的一般调用形式为: Fopen(文件名,文件使用方式); 函数返回一个指向file类型的指针。例如: FILE *fp; /*****定义一个文件指针*/ fp=fopen(”file_a”,”r”); foen函数调用中用两个字符串作为参数。第一个字符串中包含了进行读、写操作的文件名,用来指定所要打开的文件。在本例中,指定的函数名:file_a。第二个字符串中指定了文件的使用方式,用户可通过这个参数来指定对文件的使用意图。 如果以上函数调用成功,函数返回一个fille类型的指针,付给指针变量fp,从而把指针fp与文件file_a联系起来,也就是说,在此调用之后,指针fp就指向了文件file_a。 C语言中,最常用的文件使用用方式及其含义如下: (1)“r”。为读而打开文本文件。当指定这种形式时,对打开的文件只能进行“读”操作。若制定的文件不存在,则会出错,若去读一个不允许读的文件时也会出错。 (2)“rb”。为读而打开一个二进制文件,其余如“r”功能。 (3)“w”。为写而打开文本文件。这是。如果指定的文件不存在,系统将在指定位置建立一个新文件;如果文件已经存在,则将从文件的起始位置开始写,文件中原有内容将全部覆盖。 (4)“WB”. 为读而打开一个二进制文件,其余如“w”功能。 (5)“a”。为在文件后面添加数据而打开文本文件。这是。如果指定的文件不存在,系统将在指定位置建立一个新文件;如果文件已经存在,则将从文件的末尾位置开始写,文件中原有内容将保留。 (6)“ab”。为读而打开一个二进制文件,其余如“a”功能。 (7)“r+”。为读和写而打开文本文件。用这种方式时,指定的文件应当已经存在,既可以对文件进行读,也可以进行写。读写都是从文件起始位置开始。 关闭文件: fclose(文件指针); 程序例子: #include #include //fputc和fgetc函数所在文件 main() { FILE *fp=NULL; //定义文件指针 char ch; //定义字符变量 fp=fopen("d:\\wenjian.txt","w"); //打开或新建打开文件,并使指针 //指向文件 if(fp==NULL)

AT24C02串行E2PROM的读写

AT24C02串行E2PROM的读写 I2C总线是一种用于IC器件之间连接的二线制总线。它通过SDA(串行数据线)及SCL(串行时钟线)两根线在连到总线上的器件之间传送信息,并根据地址识别每个器件:不管是单片机、存储器、LCD驱动器还是键盘接口。 1.I2C总线的基本结构采用I2C总线标准的单片机或IC器件,其内部不仅有I2C接口电路,而且将内部各单元电路按功能划分为若干相对独立的模块,通过软件寻址实现片选,减少了器件片选线的连接。CPU不仅能通过指令将某个功能单元电路挂靠或摘离总线,还可对该单元的工作状况进行检测,从而实现对硬件系统的既简单又灵活的扩展与控制。I2C总线接口电路结构如图1所示。 2.双向传输的接口特性传统的单片机串行接口的发送和接收一般都各用一条线,如MCS51系列的TXD和RXD,而I2C总线则根据器件的功能通过软件程序使其可工作于发送或接收方式。当某个器件向总线上发送信息时,它就是发送器(也叫主器件),而当其从总线上接收信息时,又成为接收器(也叫从器件)。主器件用于启动总线上传送数据并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件。I2C总线的控制完全由挂接在总线上的主器件送出的地址和数据决定。在总线上,既没有中心机,也没有优先机。 总线上主和从(即发送和接收)的关系不是一成不变的,而是取决于此时数据传送的方向。SDA和SCL均为双向I/O线,通过上拉电阻接正电源。当总线空闲时,两根线都是高电平。连接总线的器件的输出级必须是集电极或漏极开路,以具有线“与”功能。I2C总线的数据传送速率在标准工作方式下为100kbit/s,在快速方式下,最高传送速率可达400kbit/s。 3.I2C总线上的时钟信号在I2C总线上传送信息时的时钟同步信号是由挂接在SCL时钟线上的所有器件的逻辑“与”完成的。SCL线上由高电平到低电平的跳变将影响到这些器件,一旦某个器件的时钟信号下跳为低电平,将使SCL线一直保持低电平,使SCL线上的所有器件开始低电平期。此时,低电平周期短的器件的时钟由低至高的跳变并不能影响SCL线的状态,于是这些器件将进入高电平等待的状态。 当所有器件的时钟信号都上跳为高电平时,低电平期结束,SCL线被释放返回高电平,即所有的器件都同时开始它们的高电平期。其后,第一个结束高电平期的器件又将SCL线拉成低电平。这样就在SCL线上产生一个同步时钟。可见,时钟低电平时间由时钟低电平期最长的器件确定,而时钟高电平时间由时钟高电平期最短的器件确定。 4.数据的传送在数据传送过程中,必须确认数据传送的开始和结束。在I2C总线技术规范中,开始和结束信号(也称启动和停止信号)的定义如图2所示。当时钟线SCL为高电平时,数据线SDA由高电平跳变为低电平定义为“开始”信号;当SCL线为高电平时,SDA线发生低电平到高电平的跳变为“结束”信号。开始和结束信号都是由主器件产生。在开始信号以后,总线即被认为处于忙状态;在结束信号以后的一段时间内,总线被认为是空闲的。

ATMEGA16读写iic(TWI)(24c02) C语言程序

ATMEGA16读写iic(24c02) C语言程序测试通过 #include #include "I2C.h" #include "1602.h" #include "delay.h" /*通过AVR往I IC写数据,并通过串口把数据读出显示出来*/ //=============================================================== void UART_init(void) //UART初始化 { DDRD = 0x02; PORTD = 0x00; UCSRA = 0x02; /*无倍速*/ UCSRB = 0x18; /*允许接收和发送*/ UC SRC = 0x06; /*8位数据,1位停止位,无校验*/ UBRRH = 0x00; UBRRL = 12; /*9600*/ } //=============================================================== void USART_TXD(float data) //发送采用查询方式 { while( !(UCSRA & BIT(UDRE)) ); UDR=data; while( !(UCSRA & BIT(TXC )) ); UCSRA|=BIT(TXC); } void main(void) { unsigned char i; //LCD_init(); uart_init();//TART初始化 SEI(); //全局中断使能

while(1) {/* I2C_Write('n',0x00); I2C_Write('c',0x01); I2C_Write('e',0x02); I2C_Write('p',0x03); I2C_Write('u',0x04); */ i=I2C_Read(0x00); //LCD_write_char(0,0,i); USART_TXD(i); i=I2C_Read(0x01); //LCD_write_data(i); USART_TXD(i); i=I2C_Read(0x02); //LCD_write_data(i); USART_TXD(i); i=I2C_Read(0x03); //LCD_write_data(i); USART_TXD(i); i=I2C_Read(0x04); //LCD_write_data(i); USART_TXD(i); } } /*上面上主函数部分*/ #include #include "delay.h" //I2C 状态定义 //MT 主方式传输 MR 主方式接受#define START 0x08 #define RE_START 0x10 #define MT_SLA_ACK 0x18 #define MT_SLA_NOACK 0x20 #define MT_DATA_ACK 0x28 #define MT_DATA_NOACK 0x30 #define MR_SLA_ACK 0x40 #define MR_SLA_NOACK 0x48 #define MR_DATA_ACK 0x50 #define MR_DATA_NOACK 0x58

C语言读写文件操作

C语言读写文件操作 #include #include #include FILE *stream;//, *stream2; FILE *stream2; void main( void ) { int numclosed; char *list; list="这个程序由czw编写"; //试图打开文件data.txt,如果该文件不存在,则自动创建 if( (stream= fopen( "data.txt", "r" )) == NULL ) { printf( "试图打开'data.txt'\n" ); printf( "'data.txt'不存在\n" ); printf( "'data.txt'被创建\n" ); } else printf( "'data.txt'被打开\n" ); //以写入方式打开 if( (stream2 = fopen( "data.txt", "w+" )) == NULL ) printf( "'data.txt'不存在\n" ); else { printf( "'data.txt'成功被打开\n" ); fwrite(list,strlen(list),30,stream2); printf("写入数据成功\n"); } //如果文件data.txt存在,就会打开成功,则stream!=NULL,这时就关闭stream if (stream!=NULL) if( fclose( stream) ) printf( "文件流 stream 被关闭\n" ); //关闭所有打开的文件流,返回关闭的文件流个数 numclosed = _fcloseall( );

at24c02应用程序

/************************************************** 24C02.C 功能描述: PC端发送3个数据n0,n1,n2. n0=0,写,将n1写入n2地址中 n0=1,读,读出n1地址中的数据,n2不起作用,但必须有 收到一个字节后,将其地址值显示在数码管第1、2位上,数值显示在第5、6位上 读出一个字节后,将其地址值显示在数码管第1、2位上,读出的值显示在第5、6位上;**************************************************/ #define uchar unsigned char #define uint unsigned int #define Slaw0x0a; //写命令字 #define Slar 0xa1; //读命令字 #include "reg52.h" #include "intrins.h" sbit Scl=P2^1; //串行时钟 sbit Sda=P2^0; //串行数据 bit Rec; //接收到数据的标志 uchar RecBuf[3]; //接收缓冲区 #define Hidden 0x10; //消隐字符在字形码表中的位置 sbit we=P2^7; sbit du=P2^6; uchar code dispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; uchar code disptab[]={0x3f,0x6,0x5b,0x4f,0x66, 0x6d,0x7d,0x27,0x7f,0x6f,0x77,0x7c,0x39,0x5e, 0x79,0x71,0x0}; uchar DispBuf[6]; uchar code TH0V al=(65535-3000)/256; uchar code TL0V al=(65535-3000)%256; uchar code th1=0xfd; uchar code tl1=0xfd; //以下是中断程序,用于显示 void timer0() interrupt 1 { static uchar count; uchar tmp; P0|=0x3f; we=1; tmp=dispbit[count]; P0&=tmp; we=0; du=1;

C语言中文件_数据的输入输出_读写

C语言中文件,数据的输入输出,读写. 文件是数据的集合体,对文件的处理过程就是对文件的读写过程,或输入输出过程。 所谓文件是指内存以外的媒体上以某种形式组织的一组相关数据的有序集合。文件分类: 顺序文件,随机文件。 文本文件和二进制文件。 文本文件也称为ASCII文件,在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。 文本文件可以在屏幕上按字符显示,源程序文件就是文本文件,由于是按字符显示,所以能读懂文件内容。 二进制文件是按二进制编码方式来存放的。这里主要讨论文件的打开,关闭,读,写,定位等操作。 文件的存取方法 C程序的输入输出(I/O)有两种方式:一种称为标准I/O或流式I/O,另一种称为低级I/O。流式I/O是依靠标准库函数中的输入输出函数实现的。低级I/O利用操作系统提供的接口函数(称为底层接口或系统调用)实现输入输出,低级I/O 主要提供系统软件使用。 在C语言中用一个FILE类型的指针变量指向一个文件,(FILE类型是系统在stdio.h中定义的描述已打开文件的一种结构类型),这个指针称为文件指针。FILE *指针变量标识符; 如 FILE *fp; 文件的打开与关闭 所谓打开文件,指的是建立文件的各种有关信息,并使文件指针指向该文件,以便对它进行操作。 关闭文件则是断开指针与文件之间的联系,也就禁止再对该文件进行操作。 1、fopen 函数原型:FILE *fopen(const char *filename,const char *mode); Fopen函数用来打开一个文件,前一部分用来说明文件路径及文件名,后一部分mode指出了打开文件的存取方式;返回值是被打开文件的FILE型指针,若打开失败,则返回NULL。打开文件的语法格式如下: 文件指针名=fopen(文件名,使用文件方式); 文件指针名必须被说明为FILE类型的指针变量。 FILE *fp; fp=fopen(“C:\\Windowss\\abc.txt”,”r”); 注意用两个反斜杠\\来表示目录间的间隔符。 存取文件的模式是一个字符串,可以由字母r,w,a,t,b及+组合而成,各字符的含

C语言文件读写函数集合

C语言文件读写函数 1.fopen() fopen的原型是:FILE *fopen(const char *filename,const char *mode),fopen 实现三个功能:为使用而打开一个流,把一个文件和此流相连接,给此流返回一个FILR指针。 参数filename指向要打开的文件名,mode表示打开状态的字符串,其取值如下: 字符串含义 "r" 以只读方式打开文件 "w" 以只写方式打开文件 "a" 以追加方式打开文件 "r+" 以读/写方式打开文件,如无文件出错 "w+" 以读/写方式打开文件,如无文件生成新文件 一个文件可以以文本模式或二进制模式打开,这两种的区别是:在文本模式中回车被当成一个字符’/n’,而二进制模式认为它是两个字符0x0D,0x0A;如果在文件中读到0x1B,文本模式会认为这是文件结束符,也就是二进制模型不会对文件进行处理,而文本方式会按一定的方式对数据作相应的转换。

系统默认的是以文本模式打开,可以修改全部变量_fmode的值来修改这个设置,例如_fmode=O_TEXT;就设置默认打开方式为文本模式;而 _fmode=O_BINARY;则设置默认打开方式是二进制模式。 我们也可以在模式字符串中指定打开的模式,如"rb"表示以二进制模式打开只读文件,"w+t"或"wt+"表示以文本模式打开读/写文件。 此函数返回一个FILE指针,所以申明一个FILE指针后不用初始化,而是用fopen()来返回一个指针并与一个特定的文件相连,如果成败,返回NULL. 例: 以下是引用片段: FILE *fp; if(fp=fopen("123.456","wb")) puts("打开文件成功"); else puts("打开文件成败"); 2.fclose() fclose()的功能就是关闭用fopen()打开的文件,其原型是:int fclose(FILE *fp);如果成功,返回0,失败返回EOF。 在程序结束时一定要记得关闭打开的文件,不然可能会造成数据丢失的情况,我以前就经常犯这样的错误。 例:fclose(fp); 3.fputc()

C语言文件操作命令

C语言文件操作函数大全 clearerr(清除文件流的错误旗标) 相关函数 feof 表头文件 #include 定义函数 void clearerr(FILE * stream); 函数说明 clearerr()清除参数stream指定的文件流所使用的错误旗标。 返回值 fclose(关闭文件) 相关函数 close,fflush,fopen,setbuf 表头文件 #include 定义函数 int fclose(FILE * stream); 函数说明 fclose()用来关闭先前fopen()打开的文件。此动作会让缓冲区内的数据写入文件中,并释放系统所提供的文件资源。 返回值若关文件动作成功则返回0,有错误发生时则返回EOF并把错误代码存到errno。 错误代码 EBADF表示参数stream非已打开的文件。 范例请参考fopen()。 fdopen(将文件描述词转为文件指针) 相关函数 fopen,open,fclose 表头文件 #include 定义函数 FILE * fdopen(int fildes,const char * mode); 函数说明 fdopen()会将参数fildes 的文件描述词,转换为对应的文件指针后返回。参数mode 字符串则代表着文件指针的流形态,此形态必须和原先文件描述词读写模式相同。关于mode 字符串格式请参考fopen()。 返回值转换成功时返回指向该流的文件指针。失败则返回NULL,并把错误代码存在errno中。 范例 #include main() { FILE * fp =fdopen(0,”w+”); fprintf(fp,”%s\n”,”hello!”); fclose(fp); } 执行 hello! feof(检查文件流是否读到了文件尾) 相关函数 fopen,fgetc,fgets,fread 表头文件 #include 定义函数 int feof(FILE * stream); 函数说明 feof()用来侦测是否读取到了文件尾,尾数stream为fopen()所返

STM32F103读写24C02 C程序-有硬件电路图和程序

//实验24C02连接在PF口 //WP、A0、A1、A2都接地,如下图所示。 //单片机:STM32F103 #include "stm32f10x_flash.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #define AT24C02 0xa0 //AT24C02 地址 /******************************** 变量定义 ---------------------------------------------------------*/ GPIO_InitTypeDef GPIO_InitStructure; //GPIO ErrorStatus HSEStartUpStatus; unsigned char Count1 , Count2; unsigned int USEC; static vu32 TimingDelay; unsigned char Readzfc; unsigned char pDat[8] = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55};//实验数据unsigned char R_Dat[8]; /*********************************声明函数-----------------------------------------------*/ void RCC_Configuration(void); void SysTick_Configuration(void); void Delay_us_24C02(u32 nTime); /************************************24C02硬件接口 ******************************/

C语言文件操作之绝对路径

C语言中对文件进行操作如何使用绝对路径? 我编了一个小程序试了一下,好像默认的路径是在生成的.exe文件所在目录下。如果使用像D:\\ABC.TXT这样的路径可以在D盘下对ABC.TXT进行操作,但如果使用D:\\SSS\ABC.TXT就不正确了,创建的文件是SSSABC.TXT,不支持多级的路径,它把路径和文件名弄混了。 到底怎么办 D:\\SSS\\ABC.TXT //你少了个\,在C字符串中,出现\的地方,你一律打两个\\就行了。 请问啊,C语言里,fopen、fread与fwrite的参数中,要求文件名,用写盘符吗? 写绝对路径吗?#include #include int main() { FILE *pfile = fopen("d:\\Jimmy.txt","wb");//Jimmy.txt写在D盘根目录下绝对路径//以2进制写入方式打开 //FILE *pfile = fopen("\\Jimmy.txt","wb");//Jimmy.txt写在当前目录下相对路径//以2进制写入方式打开 char sz[6] = "Billy"; fwrite("Jimmy",6,1,pfile);//将字串"Jimmy"写入文件pfile fclose(pfile); pfile = fopen("d:\\Jimmy.txt","rb");//以2进制读取方式打开绝对路径,D盘根目录 //pfile = fopen("\\Jimmy.txt","rb");//以2进制读取方式打开相对路径,当前路径 printf(sz);//显示原字串 printf("\n"); fread((char*)sz,6,1,pfile);//由开头读入6字节信息 printf(sz);//显示读取的信息 printf("\n"); fclose(pfile); system("pause"); return 0; }

C语言文件读写

C语言文件读写(基于缓冲技术) Syd168 2011.10.1 当文件按指定的工作方式打开以后,就可以执行对文件的读和写。下面按文件的性质分类进行操作。针对文本文件和二进制文件的不同性质,对文本文件来说,可按字符读写或按字符串读写;对二进制文件来说,可进行成块的读写或格式化的读写。 0. 文件打开与关闭 1. 读写字符 C提供fgetc和fputc函数对文本文件进行字符的读写,其函数的原型存于stdio.h头文件中,格式为: ?int fgetc(FILE *stream) fgetc( )函数从输入流的当前位置返回一个字符,并将文件指针指示器移到下一个字符处,如果已到文件尾,函数返回EOF,此时表示本次操作结束,若读写文件完成,则应关闭文件。 ?int fputc(int ch,FILE *stream) fputc()函数完成将字符c h的值写入所指定的流文件的当前位置处,并将文件指针后移一位。 fputc()函数的返回值是所写入字符的值,出错时返回EOF。 [例] 将存放于磁盘的指定文本文件按读写字符方式逐个地从文件读出,然后再将其显示到屏幕上。 采用带参数的main( ),指定的磁盘文件名由命令行方式通过键盘给定。

参数argc是用于记录输入参数的个数,argv是指针数组,用于存放输入参数的字符串,串的个数由argc描述。假设我们指定读取的文件名为L8-2.c,并且列表文件内容就是源程序。经过编译和连接生成可执行的文件L8-2.exe。运行程序l8-2.exe,输入的命令行方式为: c:\tc>l8-2 L8-2.c 上述程序以命令行方式运行,其输入参数字符串有两个,即argv[0]="c:\tc>l8-2"、argv[1]=" L8-2.c ",argc = 2。故打开的文件是L8-2.c 。程序中对fgetc( )函数的返回值不断进行测试,若读到文件尾部或读文件出错,都将返回C的整型常量EOF,其值为非零有效整数。程序的运行输出为源程序本身:c:\tc>l8-2 L8-2.c

C语言文件选择题

C语言文件选择题(答案在最后) 1、标准库函数fgets(s,n,f)的功能是 A) 从文件f中读取长度为n的字符串存入指针s所指的内存 B) 从文件f中读取长度不超过n-1的字符串存入指针s所指的内存 C) 从文件f中读取n个字符串存入指针s所指的内存 D) 从文件f中读取长度为n-1的字符串存入指针s所指的内存 2、在C中,对文件的存取以________为单位 A) 记录B) 字节 C) 元素D) 簇 3、下面的变量表示文件指针变量的是 A) FILE *fp B) FILE fp C) FILER *fp D) file *fp 4、在C中,下面对文件的叙述正确的是 A) 用“r”方式打开的文件只能向文件写数据 B) 用“R”方式也可以打开文件 C) 用“w”方式打开的文件只能用于向文件写数据,且该文件可以不存在 D) 用“a”方式可以打开不存在的文件 5、在C中,当文件指针变fp已指向“文件结束”,则函数feof(fp)的值是 A) .t. B) .F. C) 0 D) 1 6、在C中,系统自动定义了3个文件指针stdin,stdout和stderr分别指向终端输入、终端输出和标准出错输出,则函数fputc(ch,stdout)的功能是 A) 从键盘输入一个字符给字符变量ch B) 在屏幕上输出字符变量ch的值 C) 将字符变量的值写入文件stdout中 D) 将字符变量ch的值赋给stdout 7、下面程序段的功能是 #include main() {char s1; s1=putc(getc(stdin),stdout);} A) 从键盘输入一个字符给字符变量s1 B) 从键盘输入一个字符,然后再输出到屏幕 C) 从键盘输入一个字符,然后在输出到屏幕的同时赋给变量s1 D) 在屏幕上输出stdout的值 8、在C中,常用如下方法打开一个文件 if((fp=fopen("file1.c","r" ))==NULL) {printf("cannot open this file \n");exit(0);} 其中函数exit(0)的作用是

C语言中文件,数据的输入输出,读写

文件 文件是数据的集合体,对文件的处理过程就是对文件的读写过程,或输入输出过程。 所谓文件是指内存以外的媒体上以某种形式组织的一组相关数据的有序集合。文件分类: 顺序文件,随机文件。 文本文件和二进制文件。 文本文件也称为ASCII文件,在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。 文本文件可以在屏幕上按字符显示,源程序文件就是文本文件,由于是按字符显示,所以能读懂文件内容。 二进制文件是按二进制编码方式来存放的。这里主要讨论文件的打开,关闭,读,写,定位等操作。 文件的存取方法 C程序的输入输出(I/O)有两种方式:一种称为标准I/O或流式I/O,另一种称为低级I/O。流式I/O是依靠标准库函数中的输入输出函数实现的。低级I/O利用操作系统提供的接口函数(称为底层接口或系统调用)实现输入输出,低级I/O 主要提供系统软件使用。 在C语言中用一个FILE类型的指针变量指向一个文件,(FILE类型是系统在stdio.h中定义的描述已打开文件的一种结构类型),这个指针称为文件指针。FILE *指针变量标识符; 如 FILE *fp; 文件的打开与关闭 所谓打开文件,指的是建立文件的各种有关信息,并使文件指针指向该文件,以便对它进行操作。 关闭文件则是断开指针与文件之间的联系,也就禁止再对该文件进行操作。 1、fopen 函数原型:FILE *fopen(const char *filename,const char *mode); Fopen函数用来打开一个文件,前一部分用来说明文件路径及文件名,后一部分mode指出了打开文件的存取方式;返回值是被打开文件的FILE型指针,若打开失败,则返回NULL。打开文件的语法格式如下: 文件指针名=fopen(文件名,使用文件方式); 文件指针名必须被说明为FILE类型的指针变量。

24C02数据读写

一这物行时每如一、认识IIC 这是最常用、物理结构上,行信息 传输。时钟。信息传每个器件都有如:存储器)C 总线的工作方最典型的II IIC 系统由一。在数据传输传输的对象和方有一个唯一的地。发送器或接方式 C 总线连接方一条串行数据输时,由主机初方向以及信息地址,而且可 接收器可以在IIC 时方式。 据线SDA 和一条初始化一次数息传输的开始可以是单接收的 在主模式或从模时序24C02的 条串行时钟线数据传输,主和终 止均由的器件(例如 模式下操作,的操作 线SCL 组成。主机使数据在S 主机决定。如:LCD 驱动器 这取决于芯片 主机按一定的SDA 线上传输 器)或者可以接 片是否必须启的通信协议向输的同时还通过接收也可以发启动数据的传从机寻址和进过SCL 线传输发送的器件(例传输还是仅仅被进输例被

寻1I 在低2I 寻址。 1.总线上数据IIC 总线是以在时钟线高电低电平时,才2.总线上的信IIC 总线在传据的有效性 串行方式传输电平期间数据线才允许数据线上信号 送数据过程中输数据,从数据线上必须保持上的电平状态 中共有四种类据字节的最高持稳定 的逻辑态变化,如图 类型信号,它们高位开始传送,辑电平状态,11-2所示。 们分别是:开,每一个数据位高电平为数据 开始信号、停止 位在SCL 上都据1,低电平为 止信号、重新都有一个时钟为数据0。只新开始信号和应脉冲相对应。有在时钟线为应答信号。 为

开的停停重之所开始信号(STA 的时候,例如停止信号(STO 停止信号,结重新开始信号之前,主机通所示,当SCL ART):如图1如,没有主动设OP):如图11结束数据通信。号(Repeated S 通过发送重新开L 为高电平时,1-3所示,当设备在使用总-3所示,当。 START):在I 开始信号,可,SDA 由高电当SCL 为高电总线(SDA 和S SCL 为高电平IC 总线上,由可以转换与当 电平向低电平跳平时,SDA 由CL 都处于高电平时,SDA 由低由主机发送一前从机的通信 跳变,产生重由高电平向低电电平),主机通低电平向高电一个开始信号启信模 式,或是 重新开始信号,电平跳变,产通过发送开始电平跳变,产生启动一次通信是切换到与另 ,它的本质就产生开始信号始(START)信号 生停止信号。信后,在首次另一个从机通信就是一个开始。当总线空闲号建立通信。主机通过发送次发送停止信号信。如图11-信号。 闲 送号3

STM32 模拟IIC读写24C02程序代码

STM32 模拟IIC读写24C02程序代码 引脚定义和配置: #define SCL GPIO_Pin_6 //24C02 SCL #define SDA GPIO_Pin_7 //24C02 SDA voidGPIO_Configuration(void) { RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1 |RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE, ENABLE); GPIO_InitStructure.GPIO_Pin = SCL; //24C02 SCL GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = SDA; //24C02 SDA 作为输出 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); } void AT24C02_SDA_IO_SET(unsigned char io_set) //SDA引脚输入输出设置 { if(io_set==0) { GPIO_InitStructure.GPIO_Pin = SDA; //24C02 SDA 作为输出 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); } else if(io_set==1) { GPIO_InitStructure.GPIO_Pin = SDA; //24C02 SDA 作为输入 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入

C语言读写文件的例子

/*C语言使用文件打开文本文件读写的例子*/ 例1:功能:以文本方式生成一个文件,将"50 100 150"等数字输出到 文件中 #include void write_TXT_file(void) { const char * pFileName="c:\\aa.txt"; /*定义想输出的文件名及路径*/ int num1=50,num2=100,num3=150; /*定义输出到文件的数据*/ FILE * pFile; /*定义文件指针*/ pFile=fopen(pFileName,"wt"); /*以文本方式打开文件用于输出*/ if ( NULL == pFile ) /*判断打开文件成功否*/ { perror("打开文件失败"); return; } fprintf(pFile,"%d\n%d %d",num1,num2,num3); /*以文本方式输出到文件*/ if ( ferror(pFile) ) /*检验写文件是否成功*/ { perror("写文件失败"); fclose(pFile); /*关闭文件后返回*/ return; }; printf("文本文件成功写入\n"); fclose(pFile); /*不要忘记关闭文件*/ return; } 例2:/*功能:从文本文件中将数据读出来*/ void read_TXT_file(void) { const char * pFileName="c:\\aa.txt"; /*定义想读取的文件名*/ int num1,num2,num3; /*定义变量接收数据*/ FILE * pFile; /*定义文件指针*/ pFile=fopen(pFileName,"rt"); /*以文本方式打开文件用于输入*/ if ( NULL == pFile ) /*判断打开文件成功否*/ { perror("打开文件失败"); return; } fscanf(pFile,"%d%d%d",&num1,&num2,&num3); /*以文本方式读取文件*/

相关主题