C语言文件

目录

文件的基础知识

函数

头文件

主函数部分

max函数部分

头文件部分

对于以上的注意事项

c语言中的文件

打开和关闭文件

文件类型指针

打开文件

关闭文件

 getc()和putc()函数

fclose函数

fprintf(),fscanf(),fgets(),和fputs()

随机访问:fseek()和ftell()

文件的基础知识

函数

main函数过长可以分为多个函数部分,同样的函数过程也可以分为多个文件。

这部分作为一个文件并未定义max函数

#include<stdio.h>
int main()
{
	int a = 5;
	int b = 6;
	printf("%d", max(a, b));
	return 0;
}

 此时我们有两种选择:

1将max函数与main放于一个文件中

#include<stdio.h>
int max(int n, int m)
{
	return n > m ? n : m;
}
int main()
{
	int a = 5;
	int b = 6;
	printf("%d", max(a, b));
	return 0;
}

 2.将max函数与main函数放置于一个项目下的不同文件中

头文件

以上是对于函数的讨论,同时我们也可以把这部分函数定义为一个头文件。

添加一个文件,并将其后缀设置为.h 

主函数部分

max函数部分

头文件部分

对于以上的注意事项

  1. 关于<>的使用,#include后的<>表示在官方标准库中寻找一个头文件,这样的<>是无法找到我们自己编写的头文件的
  2. ""的使用,表示为先在用户的文件中寻找是否有这样一个头文件,如若找不到一个这样的文件则在官方的标准库中寻找
  3. 各个部分队友函数max(n,m)中每个部分都需要是相同的,不论是返回类型还是,n,m的数据类型。这样可以避免出错。

c语言中的文件

在C语言中,文件是数据的持久存储和检索的一种方式。文件可以存储在计算机的磁盘上或其他永久性存储设备上。C语言提供了一组标准库函数,使得程序能够打开、读取、写入和关闭文件。

文件在C语言中可以分为文本文件和二进制文件:

  1. 文本文件: 文本文件是以文本形式存储的文件,其中的数据是以字符的形式存储的,可以使用文本编辑器打开查看。文本文件中的数据通常是人可读的,例如,文本文件可以包含文本文档、配置文件等。在C语言中,可以使用标准库函数进行文本文件的读写操作,例如 fscanffprintf 等。

  2. 二进制文件: 二进制文件是以二进制形式存储的文件,其中的数据不一定是人可读的。二进制文件可以包含任意类型的数据,例如图像文件、音频文件、数据库文件等。在C语言中,可以使用标准库函数进行二进制文件的读写操作,例如 freadfwrite 等。

文件通常用于在程序的不同运行之间保持数据的持久性,以及与外部系统进行数据交换。文件操作是C语言中一个重要的主题,通过文件操作,程序能够进行数据的长期存储和检索。

打开和关闭文件

文件类型指针

在C语言中,文件类型指针是用来指向文件的指针变量。主要用于打开文件、读写文件和关闭文件等文件操作。文件类型指针的类型是 FILE,这个类型是通过 <stdio.h> 头文件定义的。

常用的文件类型指针包括:

  1. FILE * 用于指向文件的指针类型。你可以声明一个 FILE 类型的指针来引用一个文件。

下面是一个简单的例子,演示了如何声明和使用文件类型指针:

#include <stdio.h>

int main() {
    FILE *filePointer;

    // 打开文件
    filePointer = fopen("example.txt", "r");

    // 检查文件是否成功打开
    if (filePointer == NULL) {
        printf("文件打开失败。\n");
        return 1;
    }

    // 进行文件操作,例如读取或写入

    // 关闭文件
    fclose(filePointer);

    return 0;
}

在上述例子中,filePointer 是一个指向文件的指针,通过 fopen 函数打开文件后,将文件的地址赋给了 filePointer。然后可以使用这个指针进行文件操作,最后使用 fclose 函数关闭文件。

注意:在使用文件指针进行文件操作之前,最好检查文件是否成功打开,以避免在没有成功打开文件的情况下进行操作。

标准文件和相关联的文件指针

标准文件文件指针通常使用的设备
标准输入stdin键盘
标准输出stdout显示器
标准错误stderr显示器

打开文件

#include <stdio.h>

int main() {
    FILE *filePointer;

    // 使用fopen函数打开文件,返回一个指向文件的指针
    filePointer = fopen("example.txt", "r"); // 第一个参数是文件名,第二个参数是打开文件的模式

    // 检查文件是否成功打开
    if (filePointer == NULL) {
        printf("文件打开失败。\n");
        return 1; // 表示出现错误
    }

    // 执行文件操作,如读取或写入

    // 关闭文件
    fclose(filePointer);

    return 0; // 表示程序成功执行
}

在上述示例中,fopen 函数用于打开文件,它的第一个参数是文件名,第二个参数是打开文件的模式。常见的模式有:

  • "r":只读
  • "w":写入(如果文件存在则截断,不存在则创建)
  • "a":追加(如果文件存在则在末尾添加,不存在则创建)
  • "r+":读写
  • "w+":读写(如果文件存在则截断,不存在则创建)
  • "a+":读写追加(如果文件存在则在末尾添加,不存在则创建)

关闭文件

针对上面给出的例子,使用 fclose 函数来关闭打开的文件。在文件操作完成后,最好及时关闭文件以释放资源。

fclose(filePointer);

 getc()和putc()函数

ch=getchar();意为从标准库中获取一个字符

ch=getc(fp);意为从fp所指定的文件中获取一个字符

putc(ch,fpout);意为把字符ch放入FILE指针fpout指定的文件中

putc(cj,stdout)与putchar(ch)的作用相同

fclose函数

fclose(fp)函数关闭fp所指定的文件,必要时刷新缓冲区。对于正式的程序,应该检查是否成功关闭文件。如果关闭成功,fclose函数返回0,否则返回EOF。

fprintf(),fscanf(),fgets(),和fputs()

fprintf(),fscanf()这两个函数的使用与printf和scanf函数类似,不同的是前者需要用第一个参数指定待处理文件。

​
​
#include <stdio.h>
#include <stdlib.h>
#define MAX 40
int main (void)
{
     FILE *fp;
     char words[MAX];
     if ((fp = fopen ("wordy", "a+")) == NULL)
     {
         fprintf (stdout, "Can't open \"wordy\" file.\n");
         exit(EXIT_FALLURE);
     } 
     puts ("Enter words to add to the file; press the #");
     puts("key at the begining of a line to terminate.");
     while (fscanf(stdin,"%40s",words)==1) && words[0] != '\0')
     fprintf (fp, "%s\n", words);
     puts ("file conterts :");
     rewind(fp); /* 返回到文件开始处*/
     while (fscanf (fp, "%s", words) == 1)
     puts (words);
     puts("done\n");
     if (fclose(fp) != 0)
     fprintf (stderr, "Error closing file\n");
     return 0;
}

​

​

 fprintf (stdout, "Can't open \"wordy\" file.\n");

fscanf(stdin,"%40s",words)==1


fgets(buf,STLEN,fp);

这里buf是char类型数组的名称,STLEN是字符串的大小,fp为指向FILE的指针。

fgets()函数读取到它所遇到的第一个换行字符的后面,或者读取STLEN-1个字符,或者读取到文件结尾. 然后 fgets() 函数向末尾添加一个空字符(’/0‘)以构成个字符串.所以,字符串的最大长度是字符的最大数目再加上一个空字符.如果 fgets()函数在达到上限数目之前读完了一整行,它将在字符串的空字符之前添加一个换行符以标识一行结束. 这是 fgets 函数 和 gets() 函数的不同之处,后者读取换行符后将其丢弃。fgets()函数遇到EOF时将返回NULL值,可以利用这一机制检查是否到达文件结尾;如果位于岛EOF则返回之前给它传的第一个地址。

fputs(buf,fp);

这里 buf 是字符串地址,fp 指定目标文件

fputs()函数接受两个参数,它们依次是一个字符串的地址和一个文件指针.它把字符串地址指针所指的字符串写入指定文件.与 puts( 函数不同,fputs()函数打印的时候并不添加一个换行符.
由于 fgets()函数保留了换行符,而 fputs() 函数不会添加换行符,所以它们配合得相当好程序清单 

随机访问:fseek()和ftell()

 在 fseek()的 3 个参数中:第一个参数是一个指向被搜索文件的 FILE 指针.应该已经使用 fopen() 打开了该文件
fseek()的第二个参数称为偏移量(offset),表示从起始点开始要移动的距离(. 这个参数必须是一个 long 类型的值,可以为正(前移)负(后移),也可以为零(保持不动)。

第三个参数是模式 , 用参数确定起始点 . ANSI , stdio.h 头文件中规定了几个表示模式的明示常量。
文件的起始点模式
模式偏移量起始点
SEEK_SET文件开始处
SEEK_CUR当前位置
SEEK_END文件末尾

如果一切正常,fseek()的返回值为0;如果出现错误(如试图移动的距离超出文件的范围),其返回值为-1.

ftell() 函数为 long 类型,它返回文件的当前位置.在 ANSI 下,ftelll 函数在 stdio.h头文件中被声明,像最初在 UNIX 中实现的那样,ftelll) 函数通过返回距文件开始处的字节数目来确定文件的位置.文件的第一个字节到文件开始处的距离是字节 0,依此类推.在 ANSI C 下,这种定义适用于以二进制模式打开的文件,但是于对以文本模式打开的文件来讲,不一定是这样。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值