美文网首页
8.文件操作

8.文件操作

作者: 一漫116 | 来源:发表于2017-08-06 14:15 被阅读5次

// 命令行参数

// 命令行参数用于向程序传递在执行阶段才确定的数据

// 提升软件的可移植行

int main(int argc, char *argv[])

{

//argc命令行参数的个数

//argv[][]字符串数组,每一行保存一个命令行参数

//argv[0]

//argv[1]

//...

//argv[argc-1]

int i = 0;

//[0,argc)

for(i = 0; i < argc; i++)

{

printf("argv[%d] : %s\n", i, argv[i]);

}

一、文件:存储在外部介质上数据的集合,是操作系统数据管理的单位。c语言把文件看做是一个字符的序列。就是说文件是由字符组成的一个个字符流。因此c语言也将文件称作流。

二、c语言支持2种类型的文件:

1.二进制文件

以补码的形式存储。显示的时候是以文本的方式打开的话会看不懂,因为文本是一个字节一个字节的显示

2.文本文件

以ASCii码格式存放,把每个数据当做一个字符,即把字符相应的ASCII码化成二进制存储,所以一个字符占一个字节,显示的时候按字符显示,故以文本的方式打开就能看得懂

三、文件的分类:

从用户的角度看:

特殊文件:标准输入输出文件(stdin(键盘),stdout(显示屏)),标准错误(stderr(显示屏))

普通文件:磁盘文件

从操作系统角度来看:每一个与主机相连的输入输出设备都看做是一个文件

例如:输入文件:键盘,  输出文件:显示屏,打印机

四、文件操作:

针对指定目录下的文件进行简单的读写操作

五、补充:文件的应用

1.静态数据储存,

六、文件类型结构体:FILE

文件西in西用系统定义的名为FILE的结构体描述,该结构体定义在stdio.h文件中。我们可以直接用

用法:成功打开文件的时候,系统会自动建立文件结构体,该结构体包含描述该文件的所有的信息,然后返回出一个指针,该指针就指向该结构体,为了便于理解,可以把该指针看做是指向该文件的指针,程序可以通过该指针访问这个文件。在文件关闭后,该文件结构体就会被释放。

打开一个文件:

功能:以指定的模式打开指定路径下的文件,返回⼀个关联该文件的文件指针作为唯一识别标志。

参数:

path:用于指定文件路径;比如/home/user/Desktop/hello.c

mode:用于指定文件的操作模式,常用的模式有r,r+,w,w+,a,a+

函数:  FILE *fopen(char *filename,char *mode);

返回值:正常打开,返回指向文件(文件结构体)的指针

              失败, 返回NULL

打开方式:

                r:以只读的方式打开一个文本文件

                rb:以只读的方式打开一个二进制文件

                w:以只写的方式打开一个文本文件

                wb:以只写的方式打开一个二进制文件

                a:以追加的方式打开一个文本文件

                ab:以追加的方式打开一个二进制文件

                r+:以读写的方式打开一个文本文件

                rb+:...................................二进制文件

                w+;以读写的方式打开文本文件

                wb+:以读写的方式打开一个二进制文件

                a+:以读写的方式打开一个文本文件

                ab+:.....................................二进制文件

关闭一个文件:

函数:  int fclose(FILE *fp) 

功能:关闭fp指向的文件,释放文件结构体和文件指针

返回值:  成功,返回0

失败,非0

例:

#include

#include

void main()

{

int a;

FILE *fp;

fp=fopen("2.c","a");

if(fp==NULL)

{

printf("open is failed!\n");

exit(0);

}

a=fclose(fp);

if(a==0)

printf("clost is success!\n");

else

printf("close is failed!\n");

fp=NULL;//防止成为野指针

}

/*

1.若文件在当前路径下:

fp=fopen("文件名","r");

2.若文件不在当前目录下:

fp=fopen("文件的绝对路径","r");

3.若要手动输入打开的文件名

char filename[30];

scanf("%s",filename);

fp=fopen(filename,"r");

4.要对一个文件进行操作,必须先打开这个文件,操作完成之后,必须关闭这个文件,不关闭的话容易造成数据丢失,关闭之后使fp=NULL.

5.以r,r+的方式打开文件,若文件不存在,打开失败

w,w+,a,a+的方式发开文件,若文件不存在,则会自动创建同名文件6.以w/w+的方式打开文件会覆盖掉文件中之前的内容。

7.以a/a+的方式打开文件不会覆盖之前的内容,会接着之前内容继续写

*/

函数: char fputc(char ch,FILE *fp);

功能:把一个字符ch写到fp指向的文件中

返回值:正确,返回ch,

        错误,返回EOF

        EOF通常看做是一个特殊的字符理解,其实是头文件stdio.h中常量-1的宏定义。在linux中,它并不是一个特殊字符,它只是当系统读到文件结尾或者出错的时候所返回的一个信号值。

  #include

void main()

{

char ch='a';

fputc(ch,stdout); //<=>putchar(ch);

fputc('\n',stdout);

}

函数:char fgetc(FILE *fp);

功能:从fp指向的文件中读取一个字符

返回值:正常,返回读取到的字符;当读到文件尾或者出错的时候,返回EOF.

#include

void main()

{

char ch;

ch=fgetc(stdin);

fputc(ch,stdout);

putchar('\n');

}

练习:将一个文件的内容读到另一个文件中去

#include

#include

void main()

{

char c,d;

FILE *fp1,*fp2;

fp1=fopen("2.c","r");

if(fp1==NULL)

{

printf("fopen 2.c failed!\n");

exit(0);

}

fp2=fopen("xxx.c","w");

if(fp2==NULL)

{

printf("fopen xxx.c is failed!\n");

exit(0);

}

while((c=fgetc(fp1))!=EOF)

{

d=fputc(c,fp2);

putchar(d);

}

fclose(fp1);

fclose(fp2);

fp1=NULL;

fp2=NULL;

}

函数:long ftell(FILE *fp);

功能:得知目前的文件读写指针的位置

返回值:正确,返回目前文件读写指针的位置,当前文件指针所在的位置距离文件开头的长度。

                错误,返回-1.

#include

#include

void main()

{

FILE *fp;

long position;

if((fp=fopen("2.c","a"))==NULL)

{

printf("open failed!\n");

exit(0);

}

position=ftell(fp);

printf("%ld\n",position);

fclose(fp);

fp=NULL;

}

函数:int fscanf(FILE *fp,char *format,arg_list)

功能:从文件fp中获取输入,以一定的格式赋给后面的变量

            fscanf(fp,"%s",name);

返回值:成功,返回输入的个数,出错或者到达文件的结尾,返回EOF

例:

#include

void main()

{

char name[20];

int age;

//scanf("%s%d",name,&age);

<=>

fscanf(stdin,"%s%d",name,&age);//fscanf(fp,"%s%d",name,&age);

printf("name=%s,age=%d\n",name,age);

}

函数:int fprintf(FILE *fp,char *format,arg_list);

功能:把变量的值按一定的格式输出到fp指向的文件中去

            fprintf(fp,"%s",name);

返回值:成功,返回输入的个数,出错或者到达文件尾,返回EOF

例:

#include

void main()

{

char name[20];

int age;

fscanf(stdin,"%s%d",name,&age);

// printf("%s %d\n",name,age);

<=>

fprintf(stdout,"%s %d\n",name,age);

}

练习:从键盘按格式输入数据存到磁盘文件中去,并回显到屏幕上。

#include

#include

void main()

{

char name[20];

int age;

FILE *fp;

if((fp=fopen("xxx.c","w+"))==NULL)

{

printf("打开失败!\n");

exit(0);

}

fscanf(stdin,"%s %d",name,&age);

fprintf(fp,"%s %d",name,age);

fscanf(fp,"%s %d",name,&age);

fprintf(stdout,"%s %d\n",name,age);

}

函数:void rewind(FILE *fp)

功能:重置文件指针fp,使它指向文件的开头

#include

#include

void main()

{

FILE *fp;

if((fp=fopen("2.c","a"))==NULL)

{

printf("faile!\n");

exit(0);

}

long position=ftell(fp);

printf("%ld\n",position);

rewind(fp);//使文件指针fp指到文件的最开头。

position=ftell(fp);

printf("%ld\n",position);

fclose(fp);

}

函数:int fseek(FILE *fp,long offset,int whence)

功能:  使fp所指向的文件的读写指针位置重置到指定的位置,从whence位置移动offset个字符

返回值:成功0,  失败-1.

whence的值:

0:文件开头

1:当前指针所指的位置

2:文件尾

例:

fseek(fp,100L,0):将文件指针移到离文件头100个字节的位置

fseek(fp,50L,1):将位置指针从当前位置向后偏移50字符的长度

fseek(fp,-10L,2):将位置指针从文件尾倒移10个字节

#include

#include

void main()

{

FILE *fp;

long position;

if((fp=fopen("2.c","a"))==NULL)

{

printf("faile!\n");

exit(0);

}

position=ftell(fp);

printf("%ld\n",position);

fseek(fp,100L,1);

position=ftell(fp);

printf("%ld\n",position);

fseek(fp,100L,0);

position=ftell(fp);

printf("%ld\n",position);

}

函数:int fread(void *buffer,int num_bytes,int count,FILE *fp);

功能:从fp指向的文件中一次读取count个num_bytes字节大小的数据块到buffer中。

例:fread(&age,sizeof(int),1,fp);

返回值:成功,返回count;失败或者文件结束,返回0.

函数:int fwrite(void *buffer,int num_byte,int count,FILE *fp);

功能:从buffer中一次读取count个num_bytes字节大小的数据块到fp指向的文件中去

例:fwrite(&age,sizeof(int),1,fp);

返回值:成功,返回count;失败或者文件结束,返回0.

例:

#include

#include

void main()

{

FILE *fp;

int b,a=100;

if((fp=fopen("3.c","w+"))==NULL)

{

printf("open is failed!\n");

exit(0);

}

if(fwrite(&a,sizeof(int),1,fp)!=1)

{

printf("fwrite is failed!\n");

exit(0);

}

rewind(fp); //让指针重置到文件的开头

//用fread从文件3.c中读出数据赋给b

if(fread(&b,sizeof(int),1,fp)!=1)

{

printf("fread is failed!\n");

exit(0);

}

printf("b=%d\n",b);

fclose(fp);

fp=NULL;

}

练习:从键盘输入4个学生的个人信息,然后转存到磁盘中去,又读出来。

#include

#include

void main()

{

int i;

FILE *fp;

struct student

{

char name[20];

int age;

};

struct student stu1[4],stu2[4];

for(i=0;i<4;i++)

scanf("%s %d",stu1[i].name,&stu1[i].age);

if((fp=fopen("xxx.c","w+"))==NULL)

{

printf("open is failed!\n");

exit(0);

}

for(i=0;i<4;i++)

{

if(fwrite(&stu1[i],sizeof(struct student),1,fp)!=1)

{

printf("写错了!\n");

}

}

rewind(fp);//把文件的指针重置到文件开头

for(i=0;i<4;i++)

{

if(fread(&stu2[i],sizeof(struct student),1,fp)!=1)

{

printf("读错了!\n");

}

}

for(i=0;i<4;i++)

{

printf("%s %d\n",stu2[i].name,stu2[i].age);

}

fclose(fp);

fp=NULL;

}

             

相关文章

  • 8.文件操作

    // 命令行参数 // 命令行参数用于向程序传递在执行阶段才确定的数据 // 提升软件的可移植行 int main...

  • 【Python爬虫】- 8.第八次 Python文件操作

    # 8.第八次 Python文件操作 # 一、创建txt文件,写入文本如下: # name,sex # '攀攀',...

  • Mac终端命令大全

    1.目录操作 2.文件操作 3.选择操作 4.安全操作 5.编程操作 6.进程操作 7.时间操作 8.网络与通信操...

  • JavaScript常用工具方法-(8)Other 其它操作

    8. Other 其它操作

  • 文件操作

    文件操作 目标 文件操作的作用 文件的基本操作打开读写关闭 文件备份 文件和文件夹的操作 一. 文件操作的作用 思...

  • 文件和目录处理相关

    文件和目录处理相关 题: 考点:文件操作/写入操作; 延伸:目录操作函数,其他文件操作; 文件读写操作 文件系统函...

  • 09-文件操作

    一、文件操作流程 a.普通文件操作流程: 打开文件 操作文件 关闭文件 b. json文件操作流程: open(文...

  • 8.文件上传

    云服务器安装的系统一般为Linux,经常会遇到将文件从window系统上传到Linux系统这种情况,记录一下: 将...

  • 8.文件管理

    1.cat命令 copy命令的实现输入文件通过argv[1],输出保存到argv[2]。若目标文件不存在,创建一个...

  • VBS文件操作

    VBS文件操作'操作文本文件,操作fso对象(文件对象操作) --------------------------...

网友评论

      本文标题:8.文件操作

      本文链接:https://www.haomeiwen.com/subject/mcnglxtx.html