C语言文件操作详解
在C语言文件操作的过程中,通常有以下几种方式:
1.单个字符的操作:
fputc
函数原型:int fputc(int c, FILE *fp);
功能:把一字节代码c写入fp指向的文件中
返回值:正常,返回c;出错,为EOF(-1)
fgetc
函数原型:int fgetc(FILE *fp);
功能:从fp指向的文件中读取一字节代码
返回值:正常,返回读到的代码值;读到文件尾或出错,为EOF(-1) feof
函数原型:int feof(FILE *fp);
功能:判断文件是否到末尾
返回值:文件未结束,返回0;文件结束,返回真(非0)示例:
#include
#include
void main()
{
char ch;
FILE *fp1 = fopen("d:\\a.dat", "wb"); /* 以写的方式打开二进制文件*/
FILE *fp2;
if(NULL == fp1)
{
printf("Can not open this file!\n");
exit(0);
}
printf("please input a string:");
ch = getchar();
while(ch != '#') /* 输入#号结束*/
{
fputc(ch, fp1); /* 依次向文件中写*/
ch = getchar();
}
fflush(stdin); /* 清空输入缓冲区*/
fclose(fp1); /* 关闭文件*/
fp2 = fopen("d:\\a.dat", "rb"); /* 以读的方式打开二进制文件*/
if(NULL == fp2)
{
printf("Can not open this file!\n");
exit(0);
while(!feof(fp2)) /* 判断是否到达文件末尾*/
{
ch = fgetc(fp2); /* 从文件中依次读取*/
putchar(ch);
}
putchar('\n');
fflush(stdout); /* 清空输出缓冲区*/
fclose(fp2); /* 关闭文件*/
}
注意:
putc(ch,fp)与fputc(ch,fp)效果一致,但是putc可以作为宏替换,速度更快
getc(fp)与fgetc(fp)效果一致,但是getc可以作为宏替换,速度更快
putchar(c) 则是fputc(c,stdout)
getchar( ) 则是fgetc(stdin)
2.对字符串的操作:
char *fgets(char *s, int n, FILE *fp)
int fputs(char *s, FILE *fp)
功能:
fgets:从fp指向的文件中读一个长度为n的字符串,保存到s中。其中char* s要是已经有内存空间的,通常是用数组定义的,或者用char*则要用malloc分配内存。
fputs:向fp所指向的文件中写入字符串s。
返回值:
fgets:正常时返回读取字符串的首地址;出错或文件尾,返回NULL
fputs:正常时返回写入的最后一个字符;出错为EOF(-1)
示例:
#include
#include
#include
void main()
{
FILE *fp;
char string[100];
if((fp = fopen("file.txt", "w")) == NULL)
{
printf("cann't open this file!\n");
exit(0);
}
while(strlen(gets(string)) > 0) /* 从键盘输入字符串,回车停止*/
{
fputs(string, fp); /* 将字符串写入文件*/
fputs("\n", fp); /* 在最后加上一个’\n’ */
fclose(fp);
if((fp = fopen("file.txt","r")) == NULL)
{
printf("cann't open this file!\n");
exit(0);
}
while(fgets(string, 10, fp) != NULL) /* 判断是否到达文件末尾*/
fputs(string, stdout); /* 等价于puts(string); */
fclose(fp);
}
3.对二进制形式的块读写:
函数原型:
size_t fread(void *buffer,size_t size, size_t count, FILE *fp);
size_t fwrite(void *buffer,size_t size, size_t count, FILE *fp);
功能:读/写数据块fread与fwrite 一般用于二进制文件的输入/输出
fread:从fp所指向的文件中读取count个块,每个块的长度为size个字节,存放到以buffer为首地址的内存中。其中buffer必须已经是由内存空间的。
fwrite:从以buffer为首地址的内存中读取count个块,每个块的长度为size个字节,写入到fp所指向的文件中。
返回值:成功,返回读/写的块数;出错或文件尾,返回0
说明:
buffer: 指向要输入/输出数据块的首地址的指针
size: 读/写的数据块的大小(字节数)
count: 要读/写的数据块的个数
fp: 要读/写的文件指针
示例:
#include
#include
typedef struct STUDENT
{
char sNo[5];
char sName[20];
double score;
}STUDENT;
void main()
{
/* 只对单个的时候*/
// int x = 19;
// int y = 0;
// FILE* fp = fopen("d:\\a.dat", "w b");
// if(NULL == fp)
// printf("Can not open this file!\n");
// exit(0);
// }
// fwrite(&x, sizeof(x), 1, fp);
// fclose(fp);
//
// fp = fopen("d:\\a.dat", "r b");
// if(NULL == fp)
// {
// printf("Can not open this file!\n");
// exit(0);
// }
// fread(&y, sizeof(y), 1, fp);
// printf("%d\n", y);
// fclose(fp);
/* 对于块的时候*/
// int x[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
// int y[9] = {0};
// int i;
// FILE* fp = fopen("d:\\a.txt", "w b");
// if(NULL == fp)
// {
// printf("Can not open this file!\n");
// exit(0);
// }
// fwrite(x, sizeof(int), sizeof(x)/sizeof(int), fp); // fclose(fp);
//
// fp = fopen("d:\\a.txt", "r b");
// if(NULL == fp)
// {
// printf("Can not open this file!\n");
// exit(0);
// }
// fread(y, sizeof(int), sizeof(y)/sizeof(int), fp); // for(i = 0; i < 9; i++)
// {
// printf("%d ", y[i]);
// }
// printf("\n");
// fclose(fp);
/* 操作一块*/
STUDENT stu[3] = {
"0001", "赵军", 89,
"0002", "李千", 90,
"0003", "张芳", 100
};
STUDENT stu2;
FILE* fp = fopen("d:\\b.txt", "wb+");
if(NULL == fp)
{
printf("Can not open this file!\n");
exit(0);
}
fwrite(stu, sizeof(STUDENT), sizeof(stu)/sizeof(STUDENT), fp);
rewind(fp); /* 文件指针重新回到头*/
fseek(fp, sizeof(STUDENT), SEEK_SET); /* 定位,此处跳过一条记录*/
fread(&stu2, sizeof(STUDENT), 1, fp); /* 从文件中读取指定大小的块*/
printf("%s-->%s-->%lf\n", stu2.sNo, stu2.sName, stu2.score);
fclose(fp);
}
4.格式化操作文本文件:
函数原型:
int fprintf(FILE *fp,const char *format[,argument,…])
int fscanf(FILE *fp,const char *format[,address,…])
功能:按格式对文件进行读写操作。二进制的文件不要用,而改用fread和fwrite。
fprintf:输出列表中的各项数据按指定的格式写入到fp指向的文件中
fscanf:从fp所指向的文件中按指定的格式读取数据依次存放到输出列表中的各项。
返回值:成功,返回读写的个数;出错或文件尾,返回EOF(-1),eg:
fprintf(fp,“%d,%6.2f”,i,t); //将i和t按%d,%6.2f格式输出到fp文件
fscanf(fp,“%d,%f”,&i,&t); //若文件中有3,4.5 ,则将3送入i, 4.5送入t 示例:
#include
#include
void main()
{
int a = 5, b;
double x = 3.5, y;
char szText[20] = "HelloWorld!", szNewText[20];
FILE* fp = fopen("d:\\c.txt", "w+");
if(fp == NULL)
{
printf("Can not open this file!\n");
exit(0);
}
fprintf(fp, "%d %lf %s\n", a, x, szText);
rewind(fp);
fscanf(fp, "%d %lf %s\n", &b, &y, szNewText);
printf("%d---%lf---%s\n", b, y, szNewText);
fclose(fp);
}
5. rewind函数
函数原型:void rewind(FILE *fp)
功能:重置文件位置指针到文件开头
返回值:无
6. fseek函数
函数原型:int fseek(FILE *fp,long offset,int whence)
功能:文件随机定位函数,改变文件位置指针的位置。一般用于二进制文件。
返回值:成功,返回0;失败,返回非0值
Eg: fseek(fp,100L,0);
fseek(fp,50L,1);
fseek(fp,-10L,2);
第2个参数offset表示相对whence为基点的偏移字节数,要求是长整型数据,可以是正整数(向文件尾方向移动)、0(不移动)、负整数(向文件头方向移动)。
第3个参数可以用如下的宏替换:
?文件开始SEEK_SET 0
?文件当前位置SEEK_CUR 1
?文件末尾SEEK_END 2
7.ftell函数
函数原型:long ftell(FILE *fp)
功能:返回位置指针当前位置(用相对文件开头的位移量表示)
返回值:成功,返回当前位置指针位置(长整型);失败,返回-1L,
可以利用fseek和ftell函数实现求文件的元素个数。如下:
#include
using namespace std;
int main()
{
FILE* fp1 = fopen("c:\\a.txt", "w");
if(NULL == fp1)
{
cout << "Can not open this file!" << endl;
exit(0);
}
char c = '\0';
while((c = getchar()) != '#')
{
fputc(c, fp1);
}
fseek(fp1, 0L, 2); //定位到文件末尾
cout << ftell(fp1) << endl; //告诉当前文件指针的位置
fclose(fp1);
return 0;
}
8.ferror函数
函数原型:int ferror(FILE *fp)
功能:测试文件是否出现错误
返回值:未出错,0;出错,非0
说明:
每次调用文件输入输出函数,均产生一个新的ferror函数值,所以应及时测试
fopen打开文件时,ferror函数初值自动置为0
9.remove函数
函数原型:int remove(char* path)
功能:删除指定路径的文件
返回值:成功删除,0;否则,-1
举例:如下
#include
void main()
{
if(-1 == remove("d:\\c.txt")) //删除d盘下的c.txt
{
printf("remove failed!\n");
}
}
10. clearerr函数
函数原型:void clearerr(FILE *fp)
功能:使文件错误标志置为0
返回值:无
说明:出错后,错误标志一直保留,直到对同一文件调clearerr(fp)或rewind或任何其它一个输入输出函数
举例:如下
#include
int main(void)
{
FILE *fp = fopen("abc.txt", "w");
getc(fp); //此时没有内容,读取失败
if (ferror(fp))
{
printf("Error reading from abc.txt\n");
clearerr(fp); //清除错误标志
}
if(!ferror(fp))
printf("Error indicator cleared!\n");
fclose(fp);
return 0;
}
11. 系统自动打开和关闭三个标准文件:
标准输入------------键盘stdin
标准输出------------显示器stdout
标准出错输出------显示器stderr
文件操作函数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语言的文件(fputc,fgetc,fwrite,fread对文件读写操 作) //================================== fputc 向文件写入字符 #include
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
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语言读写文件操作 #include
C语言中的文件操作 12.1请编写一个程序,把一个文件的内容复制到另一个文件中。 程序如下: #include
程序如下:#include
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语言文件练习题 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语言文件操作函数大全 clearerr(清除文件流的错误旗标) 相关函数 feof 表头文件 #include
C语言中对文件进行操作如何使用绝对路径? 我编了一个小程序试了一下,好像默认的路径是在生成的.exe文件所在目录下。如果使用像D:\\ABC.TXT这样的路径可以在D盘下对ABC.TXT进行操作,但如果使用D:\\SSS\ABC.TXT就不正确了,创建的文件是SSSABC.TXT,不支持多级的路径,它把路径和文件名弄混了。 到底怎么办 D:\\SSS\\ABC.TXT //你少了个\,在C字符串中,出现\的地方,你一律打两个\\就行了。 请问啊,C语言里,fopen、fread与fwrite的参数中,要求文件名,用写盘符吗? 写绝对路径吗?#include
文件操作函数 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() 写一个字符到流中
文件操作 //1.定义文件类型指针 FILE *fp; //2. 以只读方式打开文件 fp = fopen(“data.in”, “r”); //3. 判断文件打开是否失败 if (fp==NULL){ printf(“Error 1\n”); return 1; } // 4. 判断整型数据输入是否非法 // ①文件为空或数据格式不符致使输入不成功,即没读到数据 //②输入数据不合题意(假设题目要求3
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];
freopen 目录 函数简介 程序例 函数简介 函数名: freopen 功能: 替换一个流,或者说重新分配文件指针,实现重定向。如果stream流已经打开,则先关闭该流。如果该流已经定向,则freopen将会清除该定向。此函数一般用于将一个指定的文件打开一个预定义的流:标准输入、标准输出或者标准出错。 用法: FILE *freopen(const char *filename,const char *type, FILE *stream); 头文件:stdio.h 返回值:如果成功则返回该指向该stream的指针,否则为NULL。 程序例 举例1: #include
#ifndef BITMAPHEARDER_H #define BITMAPHEARDER_H //#include"DefineBM.h" #include
fopen (打开文件) 相关函数open, fclose 表头文件#include
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语言文件操作的过程中,通常有以下几种方式: 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
} 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;