文件操作(c语言)

目录

1.文件属性

1.文件属性

2.fopen和fclose函数

3.文件操作函数

fgetc和fputc

fgets和fputs

fprintf和fscanf

 fwrite和fread

4.fseek ftell和rewind函数


1.文件属性

文件类型

文件一般分为两种类型:程序文件和数据文件

文件操作(c语言)_第1张图片

程序文件简单来说就是我们创造一个编程项目后产生的文件就是程序文件

而我们要用程序操作去操作的文件就是数据文件

文件名

文件操作(c语言)_第2张图片

 数据文件文件类型

文件操作(c语言)_第3张图片

文件指针

文件操作(c语言)_第4张图片typedef struct FILE

{

        内容;

}

内容就是一系列该文件的信息

 FILE*就是文件指针

2.fopen和fclose函数

fopen

FILE* fopen(const char filename,const char mode)

filename文件路径,文件路径分为绝对路径和相对路径

绝对路径是从头到尾都要写明白:

fopen("C:\\2020\\c语言\\test5\\test.txt","r");

相对路径是从程序文件开始:

如果和程序文件是一个路径那就

fopen("text.txt","r");

如果位于上一个路径前面加上 ..

fopen("..\\test.txt"."r");

mode是打开方式

文件操作(c语言)_第5张图片

如果打开错误,就会返回一个NULL,所以我们得使用前检验一下是否打开成功

规范使用:

​#include
#include
int main()
{
  FILE* pf=fopen("test.txt","r");
  if(pf==NULL)
  {
     printf("%s", strerror(errno)); 
     return 0;
  }
  
  fclose(pf);
  pf=NULL;
}

​

3.文件操作函数

文件操作(c语言)_第6张图片

fgetc和fputc

ing fputc(char character, FILE* stream);

int fgetc(FILE* stream);

character就是要输入的字符, stream就是FILE对象的指针

fputc是输出到文本文件里,fgetc就是从文本文件里输入到程序中

:连续输入会从上一次读到的地方接着往下读取,所有文件输入流函数都一样

示例:

fputc:

#include
#include

int main()
{
    FILE* pf = fopen("test.txt", "w");
    if (pf == NULL)
    {
        return 0;
    }
    //写入
    fputc('6', pf);
    fputc('6', pf);
    fputc('6', pf);
    fputc('b', pf);
    fputc('i', pf);
    fputc('t', pf);
    fclose(pf);
    pf = NULL;
    return 0;
}

可以在你写入的路径里找到一个test的数据文件

文件操作(c语言)_第7张图片

打开之后就是写入的信息

 文件操作(c语言)_第8张图片

fgetc

#include
#include

int main()
{
    char c;
    FILE* pf = fopen("test.txt", "r");
    if (pf == NULL)
    {
        return 0;
    }
    //写入
    c = fgetc(pf);
    printf("%c", c);
    c = fgetc(pf);
    printf("%c", c);
    c = fgetc(pf);
    printf("%c", c);
    c = fgetc(pf);
    printf("%c", c);
    c = fgetc(pf);
    printf("%c", c);
    c = fgetc(pf);
    printf("%c", c);
    fclose(pf);
    pf = NULL;
    return 0;
}

结果:

文件操作(c语言)_第9张图片

fgets和fputs

char* fgets(char* string,int n,FILE* stream);

int fputs(const char* string,FILE* stream);

string是字符串地址,n是复制字符数

fgets后会字符串最后自动加一个\n,也就是换行符

示例:

文件操作(c语言)_第10张图片

fprintf和fscanf

int fprintf ( FILE * stream, const char * format, ... );

int fscanf ( FILE * stream, const char * format, ... );

format是格式

包含要写入流的文本的 C 字符串。
它可以选择包含嵌入的格式说明符,这些说明符由后续附加参数中指定的值替换,并根据请求进行格式化

包含以下

文件操作(c语言)_第11张图片

 示例:

文件操作(c语言)_第12张图片

 文件操作(c语言)_第13张图片

 fwrite和fread

size_t fwrite(const void* buffer,size_t size,size_t count,FILE* stream);

size_t fread(const void* buffer,size_t size,size_t count,FILE* stream);

buffer指向大小至少为(大小*计数)字节的内存块的指针,转换为 void*。

size:要读取的每个元素的大小(以字节为单位)size_t是无符号整数类型

count:元素数

可以用来输入和输出结构体

示例:

fwrite

#include
#include
//创建结构体
struct stu
{
    char name[10];
    int age;
    char sex[5];
};

int main()
{
    struct stu s1 = {"long",20,"man"};
    FILE* pf = fopen("test.txt", "w");
    if (pf == NULL)
    {
        return 0;
    }
//写入文件
    fwrite(&s1, sizeof(struct stu), 1, pf);
    fclose(pf);
    pf = NULL;
    return 0;
}

fread 

#include
#include
//创建结构体
struct stu
{
    char name[10];
    int age;
    char sex[5];
};

int main()
{
    struct stu s1 = {0};
    FILE* pf = fopen("test.txt", "r");
    if (pf == NULL)
    {
        return 0;
    }
    //写入文件
    fread(&s1, sizeof(struct stu), 1, pf);
    printf("%s\n", s1.name);
    printf("%d\n", s1.age);
    printf("%s\n", s1.sex);
    fclose(pf);
    pf = NULL;
    return 0;
}

结果: 

文件操作(c语言)_第14张图片

4.fseek ftell和rewind函数

fseek

根据文件指针的位置和偏移量来定位文件指针

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

文件操作(c语言)_第15张图片

 origin:根据右边三个选项决定是从当前文件指针位置开始访问,从文件末尾开始访问,还是从文件起始位置开始访问。

 offset:从origin开始的偏移量,正数往右偏移,负数往左偏移

ftell

返回文件指针相对于起始位置的偏移量

long int ftell(FILE* stream);

rewind

让文件指针位置回到文件的起始位置

void rewind(FILE* stream);

你可能感兴趣的:(c#)