C语言文件操作函数及部分经验总结

C语言文件操作函数及部分经验总结
C语言文件操作函数及部分经验总结

fopen() 打开流

fclose() 关闭流EOF。

fputc() 写一个字符到流中int fputc(int c, FILE *stream) 成功返回这个字符,失败返回EOF。fgetc() 从流中读一个字符int fputc(FILE *stream) 成功返回这个字符,失败返回EOF。

fseek() 在流中定位到指定的字符

int fseek(FILE *stream, long offset, int whence)

如果成功返回0,参数offset

fputs() 写字符串到流

fgets() 从流中读一行或指定个字符char *fgets(char *s, int n, FILE *stream)

从流中读取n-1个字符,除非读完一行,参数s是来接收字符串,如果成功则返回s的指针,否则返回NULL。

fprintf() 按格式输出到流

int fprintf(FILE *stream, const char *format[, argument, ...])

fscanf() 从流中按格式读取

int fscanf(FILE *stream, const char *format[, address, ...])

feof() 到达文件尾时返回真值int feof(FILE *stream)

ferror() 发生错误时返回其值int ferror(FILE *stream)

void clearerr(FILE *stream)

返回流最近的错误代码,可用clearerr()来清除它

rewind() 复位文件定位器到文件开始处void rewind(FILE *stream)

remove() 删除文件

int remove(const char *filename) 成功返回0。

fread() 从流中读指定个数的字符

size_t fread(void *ptr, size_t size, size_t n, FILE *stream)

fwrite() 向流中写指定个数的字符

size_t fwrite(const void *ptr, size_t size, size_t n, FILE *stream)

tmpfile() 生成一个临时文件流

FILE *tmpfile(void) 以"w+b"的模式打开,并返回这个临时流的指针,如果失败返回NULL。

tmpnam() 生成一个唯一的文件名char *tmpnam(char *s)

参数s用来保存得到的文件名,并返回这个指针,如果失败,返回NULL。

long ftell(FILE *p);

ftell函数可以返回一个long型数值,该值是从文件开头到当前读写位置的全部的字节个数,当ftell 返回的值等于文件的长度时,表示读写位置位于文件的末尾。

>> 关于文件结束符EOF

EOF 是End Of File 的缩写。

在 C 语言中,它是在标准库中定义的一个宏。

人们经常误认为EOF 是从文件中读取的一个字符。其实,EOF 不是一个字符,它被定义为是 int 类型的一个

说的标准. 正解.

>> 关于文件结束符EOF

EOF 是End Of File 的缩写。

在C 语言中,它是在标准库中定义的一个宏。

人们经常误认为 EOF 是从文件中读取的一个字符(牢记)。其实,EOF 不是一个字符,它被定义为是int 类型的一个负数(比如-1)。EOF 也不是文件中实际存在的内容。EOF 也不是只表示读文件到了结尾这一状态(这种状态可以用feof() 来检测),它还能表示I/O 操作中的读、写错误(通常可以用ferror() 来检测)以及其它一些关联操作的错误状态。

getchar 返回EOF如果读到文件末

大师级经典的著作,要字斟句酌的去读,去理解。以前在看K&R的The C Programming Language(Second Edition)

第1.5节的字符输入/输出,被getchar()和EOF所迷惑了。可能主要还是由于没有搞清楚getchar()的工作原理和EOF 的用法。因此,感觉很有必要总结一下,不然,很多琐碎的知识点长时间过后就会淡忘的,只有写下来才是最好的方法。

其实,getchar()最典型的程序也就几行代码而已。

对于getchar,肯定很多初学的朋友会问,getchar不是以字符为单位读取的吗?那么,既然我输入了第一个字符a,肯定满足while循环(c = getchar()) != EOF的条件阿,那么应该执行putchar(c)在终端输出一个字符a。不错,我在用getchar的时候也是一直这么想的,但是程序就偏偏不着样执行,而是必需读到一个换行符或者文件结束符EOF才进行一次输出。

2.getchar()的返回值一般情况下是字符,但也可能是负值,即返回EOF。

这里要强调的一点就是,getchar函数通常返回终端所输入的字符,这些字符系统中对应的ASCII值都是非负的。因此,很多时候,我们会写这样的两行代码:

char c;

c =getchar();

这样就很有可能出现问题。因为getchar函数除了返回终端输入的字符外,在遇到Ctrl+D(Linux下)即文件结束符EOF 时,getchar()的返回EOF,这个EOF在函数库里一般定义为-1。因此,在这种情况下,getchar函数返回一个负值,把一个负值赋给一个char型的变量是不正确的。为了能够让所定义的变量能够包含getchar函数返回的所有可能的值,正确的定义方法如下(K&R C中特别提到了这个问题):

int c;

c =getchar();

二、EOF的两点总结(主要指普通终端中的EOF)

1.EOF作为文件结束符时的情况:

EOF虽然是文件结束符,但并不是在任何情况下输入Ctrl+D(Windows下Ctrl+Z)都能够实现文件结束的功能,只有在下列的条件下,才作为文件结束符。

(1)遇到getcahr函数执行时,要输入第一个字符时就直接输入Ctrl+D,就可以跳出getchar(),去执行程序的其他部分;

(2)在前面输入的字符为换行符时,接着输入Ctrl+D;

(3)在前面有字符输入且不为换行符时,要连着输入两次Ctrl+D,这时第二次输入的Ctrl+D起到文件结束符的功能,至于第一次的Ctrl+D的作用将在下面介绍。

其实,这三种情况都可以总结为只有在getchar()提示新的一次输入时,直接输入Ctrl+D才相当于文件结束符。2.EOF作为行结束符时的情况,这时候输入Ctrl+D并不能结束getchar(),而只能引发getchar()提示下一轮的输入。

这种情况主要是在进行getchar()新的一行输入时,当输入了若干字符(不能包含换行符)之后,直接输入Ctrl+D,此时的Ctrl+D并不是文件结束符,而只是相当于换行符的功能,即结束当前的输入。以上面的代码段为例,如果执行时输入abc,然后Ctrl+D,程序输出结果为:

abcabc

注意:第一组abc为从终端输入的,然后输入Ctrl+D,就输出第二组abc,同时光标停在第二组字符的c后面,然后可以进行新一次的输入。这时如果再次输入Ctrl+D,则起到了文件结束符的作用,结束getchar()。

如果输入abc之后,然后回车,输入换行符的话,则终端显示为:

abc //第一行,带回车

abc //第二行

//第三行

其中第一行为终端输入,第二行为终端输出,光标停在了第三行处,等待新一次的终端输入。

从这里也可以看出Ctrl+D和换行符分别作为行结束符时,输出的不同结果。

EOF的作用也可以总结为:当终端有字符输入时,Ctrl+D产生的EOF相当于结束本行的输入,将引起getchar()新一轮的输入;当终端没有字符输入或者可以说当getchar()读取新的一次输入时,输入Ctrl+D,此时产生的EOF相当于文件结束符,程序将结束getchar()的执行。

【补充】本文第二部分中关于EOF的总结部分,适用于终端驱动处于一次一行的模式下。也就是虽然getchar()和putchar()确实是按照每次一个字符进行的。但是终端驱动处于一次一行的模式,它的输入只有到“\n”或者EOF时才结束,因此,终端上得到的输出也都是按行的。

(1) 字节的读取

在正常的情况下, getc 以unsigned char 的方式读取文件流, 扩张为一个整数,并返

回. 换言之, getc 从文件流中取一个字节, 并加上24个零,成为一个小于256的整数,

然后返回.

int c;

while ((c = fgetc (rfp))!= -1) // -1就是EOF

fputc (c, wfp);

上面fputc 中的c 虽然是整数, 但在fputc 将其写入文件流之前, 又把整数的高24位

去掉了, 因此fgetc, putc 配合能够实现文件复制. 到目前为止, 把c 定义为

char仍然是可行的, 但下面我们将看到,把c 定义为int 是为正确判段文件是否结束.

(2) 判断文件结束.

多数人认为文件中有一个EOF,用于表示文件的结尾. 但这个观点实际上是错误的,在文

件所包含的数据中,并没有什么文件结束符. 对getc 而言, 如果不能从文件中读取,

则返回一个整数-1,这就是所谓的EOF. 返回EOF 无非是出现了两种情况,一是文件已

经读完; 二是文件读取出错,反正是读不下去了.

请注意: 在正常读取的情况下, 返回的整数均小于256, 即0x0~0xFF. 而读不出返回的

是0xFFFFFFFF. 但, 假如你用fputc把0xFFFFFFFF 往文件里头写, 高24位被屏蔽,写入的将

是0xFF. // lixforalpha 请注意这一点

(3) 0xFF 会使我们混淆吗?

不会, 前提是, 接收返回值的 c 要按原型定义为int.

如果下一个读取的字符将为0xFF, 则

int c;

c = fgetc (rfp); // c = 0x000000FF;

if (c != -1) // 当然不等, -1 是0xFFFFFFFF

fputc (wfp); // 噢, OXFF 复制成功.

字符0xFF, 其本身并不是EOF.

(4) 将c 定义char

假定下一个读取的字符为0xFF 则

char c;

c = fgetc (rfp); // fgetc(rfp)的值为0x000000FF, 暗中降为字节, c = 0xFF

if (c != -1) // 字符与整数比较? c 被带符号(signed)扩展为0xFFFFFFFF, 喔噢,

条件成立,文件复制提前退出.

while ((c=fgetc(rfp))!=EOF) 中的判别条件成立, 文件复制结束! 意外中止.

(5) 将c 定义为unsigned char;

当读到文件末尾, 返回EOF 也就是-1 时,

unsigned char c;

c = fgetc (rfp); // fgetc (rfp)的值为EOF,即-1,即0xFFFFFFFF, 降格为字节, c=0xFF

if ( c!= -1) // c 被扩展为0x000000FF, 永远不回等于0xFFFFFFFF

所以这次虽然能正确复制0xFF, 但却不能判断文件结束. 事实上,在 c 为uchar 时,

c != -1 是永远成立的, 一个高质量的编译器, 比如gcc会在编译时指出这一点.

(6) 为何需要feof?

FILE *fp;

fp 指向一个很复杂的数据结构, feof 是通过这个结构中的标志来判断文件是否结束的.

如果文件用fgetc 读取, 刚好把最后一个字符读出时, fp 中的EOF标志不会打开,这时

用feof判断,将会得到文件尚未结束的结论.

fgetc 返回-1 时, 我们仍无法确信文件已经结束, 因为可能是读取错误! 这时我们

需要feof 和ferror.

//

EOF 与feof() 的确切含义

2009-10-23 17:42

今天,遇到了在读文件的时候,居然总是读到文件中间某个字符时,就退出了,我判断是文件中的某个字符和文件的结束符导致的。

经过检查,确实发现有些在文本文件里不可见的字符导致了这个结果。处理方法是,用二进制打开就没有这个问题了。

在这里也比较深的看了一些关于eof和feof() 网上的一些介绍:(只作参考:)

一下是引用:

eof指end of file,是超过了文件末尾,文件读写都有个当前

位置,当这个位置超过了文件的字节总数,EOF变为真,如此

而已,但有一种特指的“文本文件”,如标准C语言中以fopen

和属性"t"打开的文件,除上面的情况,还以0x1A,内码为26的

字符(也称^z)为文件结束符,即使后面再有字节,也不算了,

这时eof为真.但现在的文件系统如API的,都是以二进方式,放

弃了这种标志.

二进制文件没有文件结束符,你首先要抛弃文件符的思维定势,

上面我已提了,当文件读写位置超出文件目录中的指定的长度时,feof()变为真,没有多么高深的东西。

只有文本文件以^z(26)为文件结束符,如果是以二进方式打开

时,仍然没有文件结束符,^z(26)后面的所有字节仍然可以读到

再不明白就不应该了

顺便介绍一下fgetc的使用:

while ( (cc = fgetc(fp)) != EOF)

{

....

}

if(feof(fp))

{

....

}

if(ferror(fp))

{

....

}

这个比较标准吧。其他的,读取容易出错。

//

你真的了解EOF和feof吗?

判断文件结束有两种方法:EOF和feof()

查看stdio.h可以看到如下定义:

#define EOF (-1)

#define _IOEOF 0x0010

#define feof(_stream) ((_stream)->_flag & _IOEOF)

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.360docs.net/doc/fa17573024.html,,&stu.age,&stu.score[0],&stu.score[1], stu.addr);

C语言文件操作大全

1.创建文件夹 //using System.IO; Directory.CreateDirectory(%%1); 2.创建文件 //using System.IO; File.Create(%%1); 3.删除文件 //using System.IO; File.Delete(%%1); 4.删除文件夹 //using System.IO; Directory.Delete(%%1); 5.删除一个目录下所有的文件夹 //using System.IO; foreach (string dirStr in Directory.GetDirectories(%%1)) { DirectoryInfo dir = new DirectoryInfo(dirStr); ArrayList folders=new ArrayList(); FileSystemInfo[] fileArr = dir.GetFileSystemInfos(); for (int i = 0; i < folders.Count; i++) { FileInfo f = folders[i] as FileInfo; if (f == null) { DirectoryInfo d = folders[i] as DirectoryInfo; d.Delete(); } } } 6.清空文件夹 //using System.IO; Directory.Delete(%%1,true); Directory.CreateDirectory(%%1); 7.读取文件 //using System.IO; StreamReader s = File.OpenText(%%1); string %%2 = null; while ((%%2 = s.ReadLine()) != null){

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( );

C语言 文件操作

C语言中的文件操作 12.1请编写一个程序,把一个文件的内容复制到另一个文件中。 程序如下: #include main() { char ch; FILE *fp1; FILE *fp2; if((fp1=fopen("C:\\Users\\acer\\Documents\\1.txt","r"))==NULL) { printf("The file 1.txt can not open!"); exit(0); } if((fp2=fopen("C:\\Users\\acer\\Documents\\2.txt","w"))==NULL) { printf("The file 2.txt can not open!"); exit(0); } ch=fgetc(fp1); while(!feof(fp1)) { fputc(ch,fp2); ch=fgetc(fp1); } fclose(fp1); fclose(fp2); } 运行结果: 12.3请编写一个程序,比较两个文件,如果相等则返回0;否则返回1。

程序如下:#include main() { FILE *f1,*f2; char a,b,c; int x; printf("input strings for file1\n"); f1=fopen("file1","w"); while((c=getchar())!= EOF) putc(c,f1); fclose(f1); printf("output strings for file1\n"); f1=fopen("file1","r"); while((c=getc(f1))!= EOF) printf("%c",c); fclose(f1); printf("\n\ninput strings for file2\n"); f2=fopen("file2","w"); while((c=getchar())!= EOF) putc(c,f2); fclose(f2); printf("\noutput strings for file2\n"); f1=fopen("file2","r"); while((c=getc(f2))!= EOF) printf("%c",c); fclose(f2); f2=fopen("file2","r"); getch(); }

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.系统的标准输入文件是指_________. a)键盘 b)显示器 c)软盘 d)硬盘 2.若执行fopen函数时发生错误,则函数的返回值是______. a)地址值 b)0 c)1 d)EOF 3.若要用fopen函数打开一个新的二进制文件,该文件要既能读也能写,则文件方式字符串应是______. a)"ab+" b)"wb+" c)"rb+" d)"ab" 4.fscanf函数的正确调用形式是______. a)fscanf(fp,格式字符串,输出表列) ) 11.下列关于C语言数据文件的叙述中正确的是________ A)文件由ASCII码字符序列组成,C语言只能读写文本文件 B)文件由二进制数据序列组成,C语言只能读写二进制文件 C)文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件 D)文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件 12.函数fseek(pf, OL,SEEK_END)中的SEEK_END代表的起始点是________ A)文件开始B)文件末尾C)文件当前位置D)以上都不对 13.C语言中,能识别处理的文件为_______ A)文本文件和数据块文件B)文本文件和二进制文件 C)流文件和文本文件D)数据文件和二进制文件

14.若调用fputc函数输出字符成功,则其返回值是________ A)EOF B)1 C)0 D)输出的字符 15 已知函数的调用形式:fread(buf,size,count,fp),参数buf的含义是______ A)一个整型变量,代表要读入的数据项总数 B)一个文件指针,指向要读的文件 C)一个指针,指向要读入数据的存放地址 D)一个存储区,存放要读的数据项 16 当顺利执行了文件关闭操作时,fclose函数的返回值是_________ A)-1 B)TRUE C)0 D)1 17.如果需要打开一个已经存在的非空文件“Demo”进行修改下面正确的选项是______ 盘 d) 为pname指定的相应文件开辟一个缓冲区,调用操作系统提供的打开或 建立新文件功能; 22.利用fwrite (buffer, sizeof(Student),3, fp)函数描述不正确的_________. a) 将3个学生的数据块按二进制形式写入文件; b) 将由buffer指定的数据缓冲区内的3* sizeof(Student)个字节的数据写入指定文件; c) 返回实际输出数据块的个数, 若返回0值表示输出结束或发生了错误; d) 若由fp指定的文件不存在,则返回0值; 23.利用fread (buffer,size,count,fp)函数可实现的操作_________. a) 从fp指向的文件中,将count个字节的数据读到由buffer指出的数据区

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()所返

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语言 (FILE fputc fgetc fputs fgets fscanf fprintf) 在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别介绍之。 一、流式文件操作 这种方式的文件操作有一个重要的结构FILE,FILE在中定义如下: 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() 写一个字符到流中

c语言文件操作的语句

文件操作 //1.定义文件类型指针 FILE *fp; //2. 以只读方式打开文件 fp = fopen(“data.in”, “r”); //3. 判断文件打开是否失败 if (fp==NULL){ printf(“Error 1\n”); return 1; } // 4. 判断整型数据输入是否非法 // ①文件为空或数据格式不符致使输入不成功,即没读到数据 //②输入数据不合题意(假设题目要求31 &&n < 10) { // ①|| !②printf (“Error 2\n”); fclose(fp); //关闭文件 return 2; } // 5. 判断字符串输入是否非法 // ①文件为空或数据格式不符致使输入不成功,即没读到字符串str //②输入数据不合题意(假设题目要求串长strlen(str)<80)lenth = strlen( (str, 80, fp)

if ( !(0< lenth && lenth <80) ) { // fgets失败返回0 printf (“Error 2\n”); fclose(fp); //关闭文件 return 2; } // 6. 判断字符输入是否非法: // ①文件为空或数据格式不符致使输入不成功,即没读到字符ch //②输入数据不合题意(假设题目要求ch为数字) if ( ch = fgetc(fp) == EOF || !(…0?<=ch && ch<=’9’ ) ) { // ①||!②printf (“Error 2\n”); fclose(fp); //关闭文件 return 2; } //7. 调用fscanf函数从文件输入n个学生信息的结构体型数据 #define SIZE 60 struct student_type{ unsigned long num; char name[10]; int score[3]; }stud[SIZE];

C语言文件操作函数freopen

freopen 目录 函数简介 程序例 函数简介 函数名: freopen 功能: 替换一个流,或者说重新分配文件指针,实现重定向。如果stream流已经打开,则先关闭该流。如果该流已经定向,则freopen将会清除该定向。此函数一般用于将一个指定的文件打开一个预定义的流:标准输入、标准输出或者标准出错。 用法: FILE *freopen(const char *filename,const char *type, FILE *stream); 头文件:stdio.h 返回值:如果成功则返回该指向该stream的指针,否则为NULL。 程序例 举例1: #include int main() { /* redirect standard output to a file */ if (freopen("D:OUTPUT.txt", "w", stdout)==NULL) fprintf(stderr, "error redirecting stdout\n"); /* this output will go to a file */ printf("This will go into a file."); /* close the standard output stream */ fclose(stdout); return 0; } 举例2: 如果上面的例子您没看懂这个函数的用法的话,请看这个例子。这个例子实现了从stdout到一个文本文件的重定向。即,把输出到屏幕的文本输出到一个文本文件中。 #include int main() { int i; if (freopen("D:OUTPUT.txt", "w", stdout)==NULL) fprintf(stderr, "error redirecting\stdout\n"); for(i=0;i<10;i++) printf("%3d",i); printf("\n"); fclose(stdout);

原创C语言位图操作

#ifndef BITMAPHEARDER_H #define BITMAPHEARDER_H //#include"DefineBM.h" #include #include #include #include #include using namespace std; static FILE *fp; //数据类型定义 typedef unsigned short WORD; typedef unsigned long DWORD; typedef long LONG; typedef unsigned char BYTE; typedef struct tagBMFILEHEADER {//位图文件头结构,该结构体占14个字节。 WORD bfType;//位图文件类型,必须是0x424D,即字符串"BM",也就是说,所有的"*.bmp"文件的头两个字节都是"BM"。 DWORD bfSize;// 位图文件的大小,以字节为单位 WORD bfReserved1;//位图文件保留字,必须为0 WORD bfReserved2; // 位图文件保留字,必须为0 DWORD bfOffBits;// 位图数据的起始位置,以相对于位图文件头的偏移量表示,以字节为单位 }BMFILEHEADER; typedef struct tagBMINFOHEADER {//位图信息头结构,该结构体共占40个字节。 DWORD biSize;// 本结构所占用字节数,40个字节 DWORD biSizeImage;// 位图的大小,以字节为单位 LONG biWidth;// 位图的宽度,以像素为单位 LONG biHeight;// 位图的高度,以像素为单位 WORD biPlanes;// 目标设备的级别,必须为1 WORD biBitCount;// 每个像素所需的位数,必须是1(双色),4(16色),8(256色)或24(真彩色)之一 DWORD biCompresses;// 位图压缩类型,必须是0(不压缩),1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一 LONG biXPelsPelMeter;// 位图水平分辨率,每米像素数 LONG biYPelsPelMeter; // 位图垂直分辨率,每米像素数 DWORD biClrUsed;// 位图实际使用的颜色表中的颜色数,如果该值为零,则用到的颜色数为2的biBitCount次幂。

C语言文件操作函数大全(超详细).docx

fopen (打开文件) 相关函数open, fclose 表头文件#include 定义函数FILE * fopen (const char * path, const char * mode); 两数说明参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流 形态。 mode有下列几种形态字符串: r打开只读文件,该文件必须存在。 r+打开可读写的文件,该文件必须存在。 w打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。 w+打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。 a以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。 a+以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 复制代码代码如下: r Open text file for reading. The stream is positioned at the beginning o f the file. r+ Open for reading and writing. The stream is positioned at the beginning of the file. w Truncate file to zero length or create text file for writing? The strea m is positioned at the beginning of the file. w+ Open for reading and writing? The file is created if it does not exist, otherwise it is truncatod? The stream is posi -

C语言文件操作

C语言中没有输入输出语句,所有的输入输出功能都用ANSI C提供的一组标准库函数来实现。文件操作标准库函数有: 文件的打开操作 fopen 打开一个文件 文件的关闭操作 fclose 关闭一个文件 文件的读写操作 fgetc 从文件中读取一个字符 fputc 写一个字符到文件中去 fgets 从文件中读取一个字符串 fputs 写一个字符串到文件中去 fprintf 往文件中写格式化数据 fscanf 格式化读取文件中数据 fread 以二进制形式读取文件中的数据 fwrite 以二进制形式写数据到文件中去 getw 以二进制形式读取一个整数 putw 以二进制形式存贮一个整数 文件状态检查函数 feof 文件结束 ferror 文件读/写出错 clearerr 清除文件错误标志 ftell 了解文件指针的当前位置 文件定位函数 rewind 反绕 fseek 随机定位 文件的打开 1.函数原型 FILE *fopen(char *pname,char *mode) 2.功能说明 按照mode 规定的方式,打开由pname指定的文件。若找不到由pname指定的相应文件,就按以下方式之一处理: (1)此时如mode 规定按写方式打开文件,就按由pname指定的名字建立一个新文件; (2)此时如mode 规定按读方式打开文件,就会产生一个错误。 打开文件的作用是: (1)分配给打开文件一个FILE 类型的文件结构体变量,并将有关信息填入文件结构体变量; (2)开辟一个缓冲区; (3)调用操作系统提供的打开文件或建立新文件功能,打开或建立指定文件;FILE *:指出fopen是一个返回文件类型的指针函数;

C语言文件操作常用函数详解

C语言文件操作详解 在C语言文件操作的过程中,通常有以下几种方式: 1.单个字符的操作: fputc 函数原型:intfputc(intc,FILE*fp); 功能:把一字节代码c写入fp指向的文件中 返回值:正常,返回c;出错,为EOF(-1) fgetc 函数原型:intfgetc(FILE*fp); 功能:从fp指向的文件中读取一字节代码 返回值:正常,返回读到的代码值;读到文件尾或出错,为EOF(-1) feof 函数原型:intfeof(FILE*fp); 功能:判断文件是否到末尾 返回值:文件未结束,返回0;文件结束,返回真(非0)示例: #include #include voidmain() { charch; FILE*fp1=fopen("d:\\a.dat","wb");/*以写的方式打开二进制文件*/ FILE*fp2; if(NULL==fp1) { printf("Cannotopenthisfile!\n"); exit(0); } printf("pleaseinputastring:"); ch=getchar(); while(ch!='#')/*输入#号结束*/ { fputc(ch,fp1);/*依次向文件中写*/ ch=getchar(); } fflush(stdin);/*清空输入缓冲区*/ fclose(fp1); /*关闭文件*/ fp2=fopen("d:\\a.dat","rb");/*以读的方式打开二进制文件*/ if(NULL==fp2) { printf("Cannotopenthisfile!\n"); exit(0);

C语言文件读写基本操作

#include #include //写文件 bool writeToFile(); //读文件所有内容 bool readFromFile(); //获取文件长度 long getLength(FILE *fp); //读文件单行 void readSingleLine(); void main() { if(writeToFile()) { if(!readFromFile()) { printf("读取失败\n"); } printf("\n读取第一行:\n"); readSingleLine(); } } bool writeToFile() { FILE *fp; char *temp = "文件写入测试1\r\n文件写入测试2\r\n文件写入测试3"; fp = fopen("d:\\test.txt", "w"); if(!fp) { printf("文件不存在\n"); return false; } fprintf(fp, "%s", temp); fclose(fp); return true;

} bool readFromFile() { FILE *fp; char *temp; fp = fopen("d:\\test.txt", "r"); if(!fp) { printf("文件不存在\n"); return false; } long n = getLength(fp); temp = (char*) malloc(sizeof(char) * n); while(!feof(fp)) { fscanf(fp, "%s", temp); printf("%s\n", temp); } printf("文件长度:%ld\n", n); fclose(fp); return true; } long getLength(FILE *fp) { if(!fp) { return 0; } fseek(fp, 0, SEEK_SET); fseek(fp, 0, SEEK_END); long t = ftell(fp); fseek(fp, 0, SEEK_SET); return t; } void readSingleLine() { FILE *fp;

相关文档
最新文档