TC中打开文件和写入文件

  
  

    四年前在大学的时候学过这个,没有想到,在现在看来这个东西还是这么的流行.这正验证了那句话,越是简单的东西,功能越是强大,生命力越是顽强!你可别小看这简单的TC.听说很多高手都在用,很多骨灰级的高手也用这个。就像很多电路电子高手都会对汇编语言情有独钟一样。只因为她太单纯!所以人人都喜欢。

文件打开fopen函数


TAG:文件,ANSI C文件处理函数,文件打开与关闭,文件打开fopen函数
TEXT:在C语言中,文件的打开操作是通过fopen函数来实现的,此函数的声明在“stdio.h”中,原型如下:
FILE *  fopen (const char *path, const char *mode);
函数形式参数说明如下:
const char *path ——文件名称,用字符串表示;
const char *mode ——文件打开方式,同样用字符串表示。
函数返回值——FILE类型指针。如果运行成功,fopen 返回文件的地址,否则返NULL。
提示: 注意检测fopen函数的返回值,防止打开文件失败后,继续对文件进行读写而出现严重错误。
文件名称一般要求为文件全名,文件全名由文件所在目录名加文件名构成。例如文件8_4.C存储在C驱动器的temp目录中,则文件所在目录名为“c:\temp”,文件名为“8_4.C”,文件全名为“c:\temp\8_4.C”。如果用字符串来存储文件全名,语句如下:
char szFileName[256]=“c:\\temp\\8_4.c”
fopen函数允许文件名称仅仅为文件名,那么此文件的目录名由系统自动确定,一般为系统的当前目录名。
假设ctest.c中包括如下的程序语句:
FILE *fpFile;
fpFile =fopen(“C:\\a.txt”, “w+”);
编译连接后形成可执行程序ctest.exe。无论ctest.exe在什么目录下运行,都会准确的打开C盘根目录下的a.txt文件。但是如果包括如下的程序语句:
FILE *fpFile;
fpFile =fopen (“a.txt”, “w+”);
则文件“a.txt”的位置则与ctest.exe所在的目录有关。假设Ctest.exe存储在c:\tc目录下,执行下面的dos命令:
c:\>cd c:\tc
c:\tc>Ctest
则在c:\tc目录下创建了名为a.txt的文件。
但是如果执行下面的dos命令:
c:\>cd c:\
c:\>C:\TC\ctest
则在c:\目录下创建了名为a.txt的文件。因此在确定文件名称时,要非常注意。
提示: 注意文件名称的格式要求路径的分割符为“\\”,而不是“\”,因为在C语言中“\\”代表字符\。例如“C:\\Test.dat”
根据不同的需求,文件的打开方式有如下几种模式:
1) 只读模式
2) 只写模式
3) 追加模式
4) 读写模式
char *mode 含义 注释
“r”只读 打开文本文件,仅允许从文件读取数据
“w”只写 打开文本文件,仅允许向文件输出数据
“a”追加 打开文本文件,仅允许从文件尾部追加数据
“rb” 只读 打开二进制文件,仅允许从文件读取数据
“wb” 只写 打开二进制文件,仅允许向文件输出数据
“ab” 追加 打开二进制文件,仅允许从文件尾部追加数据
“r+” 读写 打开文本文件,允许输入/输出数据到文件
“w+” 读写 创建新文本文件,允许输入/输出数据到文件
“a+” 读写 打开文本文件,允许输入/输出数据到文件
“rb+”读写 打开二进制文件,允许输入/输出数据到文件
“wb+”读写 创建新二进制文件,允许输入/输出数据到文件
“ab+”读写 打开二进制文件,允许输入/输出数据到文件
提示:注意文件打开模式参数为字符串,不是字符。另外,对不同的操作系统或不同的C语言编译器,文件打开模式参数可能不同。
REF:.txt,只读模式.txt,只写模式.txt,追加模式.txt,读写模式.txt
只读模式

TAG:文件,ANSI C文件处理函数,文件打开与关闭,文件打开fopen函数,文件打开模式,只读模式
TEXT:只能从文件读取数据,也就是说只能使用读取数据的文件处理函数,同时要求文件本身已经存在。如果文件不存在,则fopen的返回值为NULL,打开文件失败。由于文件类型不同,只读模式有两种不同参数。“r”用于处理文本文件(例如.c文件和..txt文件),“rb” 用于处理二进制文件(例如.exe文件和.zip文件)。
REF:.txt
只写模式

TAG:文件,ANSI C文件处理函数,文件打开与关闭,文件打开fopen函数,文件打开模式,只写模式
TEXT:只写模式;只能向文件输出数据,也就是说只能使用写数据的文件处理函数。如果文件存在,则删除文件的全部内容,准备写入新的数据。如果文件不存在,则建立一个以当前文件名命名的文件。如果创建或打开成功,则fopen返回文件的地址。同样只写模式也有两种不同参数,“w”用于处理文本文件,“wb”用于处理二进制文件。
REF:.txt
追加模式

TAG:文件,ANSI C文件处理函数,文件打开与关闭,文件打开fopen函数,文件打开模式,追加模式
TEXT:
追加模式;一种特殊写模式。如果文件存在,则准备从文件的末端写入新的数据,文件原有的数据保持不变。如果此文件不存在,则建立一个以当前文件名命名的新文件。如果创建或打开成功,则fopen的返回此文件的地址。其中参数“a”用于处理文本文件,参数“ab”用于处理二进制文件。
REF:.txt
读写模式

TAG:文件,ANSI C文件处理函数,文件打开与关闭,文件打开fopen函数,文件打开模式,读写模式
TEXT:
读写模式:可以向文件写数据,也可从文件读取数据。此模式下有如下的几个参数:“r+”,“rb”:要求文件已经存在,如果文件不存在,则打开文件失败。“w+”和“wb+”:如果文件已经存在,则删除当前文件的内容,然后对文件进行读写操作;如果文件不存在,则建立新文件,开始对此文件进行读写操作。“a+”和“ab+”如果文件已经存在,则从当前文件末端的内容,然后对文件进行读写操作;如果文件不存在,则建立新文件,然后对此文件进行读写操作。
REF:.txt
文件关闭fclose函数

TAG:
TEXT:在C语言中,文件的关闭是通过fclose函数来实现。此函数的声明在“stdio.h”中,原型如下:
int fclose (FILE *stream);
函数形式参数说明如下:
FILE *stream ——打开文件的地址。
函数返回值 ——int 类型,如果为0,则表示文件关闭成功,否则表示失败。.
文件处理完成之后,最后的一步操作是关闭文件,保证所有数据已经正确读写完毕,并清理与当前文件相关的内存空间。在关闭文件之后,不可以再对文件进行读写操作,除非再重新打开文件。
例13-2 打开名为“a.txt”的文件,并向文件输出字符串“TestFile”,然后关闭文件,同时在屏幕上输出fclose的返回值。
#include "stdio.h"
void main()
{
FILE *fpFile;
int nStatus=0;
If((fpFile=fopen("a.txt","w+"))==NULL)
{
printf(“Open file failed!\n”);
exit(0);
}
fprintf(fpFile,"%s","TestFile");
nStatus=fclose(fpFile);
printf("%d",nStatus);
}
提示:注意在文件处理的最后调用fclose函数关闭文件。在关闭文件之后,不可再对文件进行读写操作。
REF:.txt
 
1.从键盘输入一行字符,写入一个文件,再把该文件内容读出显示在屏幕上。   #include<stdio.h>   main()   {   FILE *fp;   char ch;   if((fp=fopen("d:\\ string","w+"))==NULL)   {   printf("Cannot open file strike any key exit!");   getch();   exit(1);   }   printf("input a string:\n");   ch=getchar();   while (ch!='\n')   {   fputc(ch,fp);   ch=getchar();   }   rewind(fp);   ch=fgetc(fp);   while(ch!=EOF)   {   putchar(ch);   ch=fgetc(fp);   }   printf("\n");   fclose(fp);   }     2.把命令行参数中的前一个文件名标识的文件,复制到后一个文件名标识的文件中, 如命令行中只有一个文件名则把该文件写到标准输出文件(显示器)中。   #include<stdio.h>   main(int argc,char *argv[])   {   FILE *fp1,*fp2;   char ch;   if(argc==1)   {   printf("have not enter file name strike any key exit");   getch();   exit(0);   }   if((fp1=fopen(argv[1],"r+"))==NULL)   {   printf("Cannot open %s\n",argv[1]);   getch();   exit(1);   }   if(argc==2) fp2=stdout;   else if((fp2=fopen(argv[2],"w+"))==NULL)   {   printf("Cannot open %s\n",argv[1]);   getch();   exit(1);   }   while((ch=fgetc(fp1))!=EOF)   fputc(ch,fp2);   fclose(fp1);   fclose(fp2);   }   这两个程序运行一下试一试. 
 
#include   <stdio.h> 
ANSI   C规定了标准输入输出函数库,可用fopen()函数来实现打开文件,fclose()关闭指定的文件。函数原型为:

FILE*   fopen(char*   filepathname,   char*   mode);
int   fclose(FILE*   fp);

关于文件的后缀名支持楼上
另一个资料:

"文件"是指存储在计算机外部存储器中的数据的集合。计算机根据文件的名字,完成对文件的操作。
C语言将文件看作是字符构成的序列,即字符流。其基本的存储单位是字节。
C语言中的文件,按照它的ASC代码存放,称为ASC文件或文本文件。按照数据值的二进制代码存放,称为二进制文件。
C语言在stdio.h中定义了一个file文件结构体类型,包含管理和控制文件所需要的各种信息。
在c程序中系统对文件进行的各种操作是通过指向文件结构体的指针变量来实现的。
定义一个指向文件结构体类型的指针变量的形式:
FILE * 指针变量名;
例如:FILE *fp1,*fp2;
则fp1,fp2是可以指向2个FILE文件结构体的指针变量。文件指针变量的赋值操作是由打开文件函数fopen()实现的。
fopen()函数的原型是:
FILE *fopen(char *filename,char *mode);
其中filename 是要打开的文件名,mode是说明处理文件的方式。它的调用方式一般为:
文件指针变量=fopen(文件名,处理文件方式);
例如:fopen("a:\\exam1.c","r")
注意:文件名是要打开的文件的文件名字,可以是包含盘符、路径、文件名、扩展名的文件标识符。但在书写时要符合c语言的规定。例如文件名“a:\tc\w1.c”,在该函数中的文件名应写成“a:\\tc\\w1.c”。
如果是二进制文件,在使用时值要在模式后添加字符b即可,如“rb”\"rb+"分别表示读取二进制文件和一读取/写入打开二进制文件。
由于文件不存在等原因造成不能打开文件,则调用fopen()后将返回一个空指针null.
if(fp=fopen("a:\\exam1.c","r")==NULL)
{
 printf("Bu neng da kai wen jian \n");
 gets();
 exit(1);
}
一般exit(0)表示程序正常退出,exit(非零值)表示程序出错后退出。
文件的关闭
当c语言文件使用完后,应该立即关闭文件,防止由于误操作等原因破坏已经打开的文件。文件的关闭通过stdio.h中的fclose()函数实现。具体用法是:
fclose(文件指针);
例如:fclose(fp);
则程序将文件类型指针fp所指向的文件关闭。fp不再指向该文件。
1。fputc()函数
函数fputc()的作用是向文件写入一个字符。其调用形式为:
fputc(字符,文件型指针变量)
例:fputc('A',fp);
fp为一个文件类型指针变量,上式将字符常量‘A’(也可以是字符型变量)写入文件当前位置,并且使文件位置指针下移一个字节。如果写入操作成功,返回值是该字符,否则返回EOF.
通过键盘输入字符到文件中,直到输入“*”结束。
#include "stdio.h"
main()
{
    FILE *fp;
    char f_name[30];
    char choise,in_char;
    printf("\n\tPlease input the file name\n");
    scanf("%s",f_name);
    fp=fopen(f_name,"w+");
    printf("\nPlease input :\n");
    in_char=getchar();
    while(in_char!='*')
    {
     fputc(in_char,fp);
     in_char=getchar(); 
    }
    fclose(fp);
}
从文件中读取一个字符
函数fgetc()的作用是从一个文件中读取一个字符。其调用形式为:
fgetc(文件型指针变量)
例:a=fgetc(fp);
fp为一个文件类型的指针变量,函数fgetc(fp)不仅返回文件当前位置的字符,并且使文件位置指针下移一个字符。如果遇到文件结束,则返回值为文件结束标志EOF。
输入文件名,输出该文件的内容。
#include <stdio.h>

void main()
{
 FILE *fp;
 char out_ch,f_name[30];
 printf("Please input the filename\n");
 scanf("%s",f_name);
 fp=fopen(f_name,"r");
 if(fp!=NULL)
 {
  printf("The file is:\n");
  while((out_ch=fgetc(fp))!=EOF)
  {
   putchar(out_ch); 
  
 }
 else
 {
  printf("\n\n\t\t%s The file not find!\n",f_name); 
 }
 fclose(fp);
}
按字符串读写的函数
函数fputs()的作用是向文件写入一个字符串。其调用形式为:
fputs(字符串,文件型指针变量)
其中字符串可以是字符串常量、指向字符串的指针变量、存放字符串数组的数组名。写入文件成功,函数返回值为0,否则为EOF。
注意:字符串的结束标志‘\0’ 不写入。例如:
fputs("Hello",fp);
fp为一个文件型指针变量,上式将字符串中的字符h,e,l,l,o写入文件指针的当前位置。
fgets函数
函数fgets()的作用是从一个文件中读取一个字符串。其调用形式为:
fgets(字符数组,字符数,文件型指针变量)
例:fgets(str,n,fp);
其作用是从fp指向的文件的当前位置开始读取n-1个字符,并加上字符串结束标志‘\0’一起放入字符数组str中。如果从文件读取字符时遇到换行符或文件结束标志EOF,读取结束。函数返回值为字符数组str的首地址。
将文件tsu.txt 复制到tsu1.txt中
#include "stdio.h"
main()
{
    FILE *f_in,*f_out;
    char str[50];
    f_out=fopen("tsu.txt","r");
    f_in=fopen("tsu1.txt","w");
    while(!feof(f_out))
    {
     fgets(str,30,f_out);
     fputs(str,f_in); 
    }
    fclose(f_out);
    fclose(f_in);
    printf("The file copy finish!");
}

fprintf()函数
函数fprintf()的作用与printf()相似,只是输出对象不是标准输出设备而是文件,即按照格式要求将数据写入文件。它调用的一般形式为:
fprintf(文件型指针变量,格式控制,输出列表)
例如:
fprintf(fp,"%d,%s,%5.1f",num,name,score);
它的作用是将变量num,name,score按照%d,%s,%5.1f的格式写入fp指向的文件当前
位置

fscanf()函数是按照格式要求从文件中读取数据。它调用的一般形式为:
fscanf(文件型指针变量,格式控制,输入表列);
例如:
fscanf(fp,"%ld,%s,%5.1f",&num,name,&score);
它的作用是从fp指向的文件的当前位置开始,按照的格式取出数据,赋给变量num,name,score.
。主要用于数据文件的读写,即可以使用asc文件也可以使用二进制文件。
将10个学生纪录输入文件tsu.txt中,并显示在屏幕上。
#include "stdio.h"
main()
{
    FILE *fp;
    long num;
    int n,score;
    char name[20];
    fp=fopen("tsu.txt","w");
    printf("Please input :\n");
    for(n=1;n<=10;n++)
    {
     scanf("%s%10ld%d",name,&num,&score);
     fprintf(fp,"%20s%10ld%5d\n",name,num,score);
     
    }
    fclose(fp); 
    fp=fopen("tsu.txt","r");
    for(n=1;n<=10;n++)
    {
     fscanf(fp,"%20s%10ld%5d\n",name,&num,&score);
     printf("%20s%10ld%5d\n",name,num,score);
    }
    fclose(fp);
}

fwrite()函数
作用是将成批的数据块写入文件。
fwrite(写入文件的数据块的存放地址,一个数据块的字节数,数据块的个数,文件型指针变量);
如果函数fwrite()操作成功,则返回值为实际写入文件的数据块的个数。
例如:已知struct student类型的数组stu[20],则语句
则fwrite(&stu[1],sizeof(struct student),2,fp);
从结构体数组元素str[1]存放的地址开始,以一个结构体struct student类型变量所占字节数为一个数据块,共写入文件类型指针fp指向的文件2个数据块,即stu[1]\stu[2]的内容写入文件。如果操作成功,函数的返回值为2。

fread()函数
作用是从文件中读出成批的数据块。
fread(从文件读取得数据块的存放地址,一个数据块的字节数,数据块的个数,文件型指针变量);
如果函数fread()操作成功,则返回值为实际从文件中读取数据块的个数。
例如已知stu1是一个结构体struct student变量,则
fread(&stu1,sizeof(struct student),1,fp);
从文件类型指针fp指向的文件的当前位置开始,读取1个数据块,该数据块为结构体struct student类型变量所占字节数,然后将读取得内容放入变量stu1中。
注意:fwrite()和fread()函数读写文件时,只有使用二进制方式,才可以读写任何类型的数据。最常用于读写数组和结构体类型数据。

函数feof()
用来检测一个指向文件的指针是否已经指到了文件最后的结束标志eof。
调用的一般形式为:
feof(文件型指针变量);
如果文件型指针指向的文件的当前位置为结束标志eof,则函数返回一个非零值,否则返回0值。

函数rewind()将令指向文件的指针重新指向文件的开始位置。函数无返回值。其调用形式为:
rewind(文件型指针变量);
例如:
rewind(fp);
fp是一个指向文件的指针,执行该语句后,fp指向文件的开始位置,即文件的第一个数据。

函数fseek()可以将使得指向文件的指针变量指向文件的任何一个位置,实现随即读写文件。它调用的形式为:
fseek(文件型指针变量,偏移量,起始位置);
函数fseek()将以文件的起始位置为基准,根据偏移量往前或往后移动指针。其中偏移量是一个长整型数,表示从起始位置移动的字节数,正数表示指针往后移,负数表示指针往前移。起始位置用0、1、2或者用名字seek_set\seek_cur\seek_end代表文件开始、文件当前位置和文件结束位置。如果指针设置成功,返回值为0,否则为非0值。

函数ftell()用于测试指向文件的指针的当前位置。它的调用方式为:
ftell(文件型指针变量);
函数的返回值是一个长整形数,如果测试成功,则返回指向文件的指针当前指向的位置距离文件开头的字节数,否则返回-1L

作业:
1、将键盘输入的10个浮点数保存到一个二进制文件中,然后在文件末尾再追加若干数据,最后统计文件中数据的个数。
2、已知2个文件data1和data2,将他们的内容和并起来,生成第3个文件data3.
3、已知一个由西文字符组成的ask文件,要求将文件中的英文字母按照如下形势变换,然后生成一个新的密码文件。a<=>z b<=>y c<=>x.......
4、已知一个文件包含若干人的姓名、通讯地址、邮政编码和电话,要求根据此文件生成一个只包含所有人姓名和电话的新文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值