c 文件操作stdio

1:FILE *fopen(const char *filename, const char *mode) 指定模式mode打开filename 文件流
int fclose(FILE *stream) 关闭流 stream。刷新所有的缓冲区。

        FILE * f = NULL;
    f = fopen("test.txt", "w");
    if (f)
    {
        printf("success");
    }
    fclose(f);

2:clearerr(FILE *stream) 清除给定流 stream 的文件结束和错误标识符。
int ferror(FILE *stream) 测试给定流 stream 的错误标识符,返回0,没有错误标识

void perror(const char *str) 输出错误到标准流

    FILE * f = NULL;
    f = fopen("test.txt", "w+");
    char c;

    c = fgetc(f);
    if (ferror(f))
    {
        //写入模式,fgetc时错误
        perror("打开文件失败");
    }

int feof(FILE *stream) 测试给定流 stream 的文件结束标识符,返回0,没有错误标识

FILE * f = NULL;
char c;
f = fopen("test.txt", "r");
    while (1)
    {
        c = fgetc(f);
        if (ferror(f))
        {
            break;
        }
        printf("%c \n");
    }
    fclose(f);

:3:int rename(const char *old_filename, const char *new_filename) 修改文件名返回零成功

 int ret = rename("ccc.txt", "aaa.txt");
       if (ret == 0)
       {
           printf("文件重命名成功");
       }

4: int remove(const char *filename) 删除给定的文件返回零成功

  if (remove("aaa.txt")== 0)
      {
          printf(" 删除成功");
      }

5:

int fgetpos(FILE *stream, fpos_t *pos) 获取流 stream 的当前文件位置
int fsetpos(FILE *stream, const fpos_t *pos) 设置给定流 stream 的文件位置为给定的位置

FILE *fp;
fpos_t position;
fp = fopen("file.txt", "w+");
if (fp)
{
    fputs("Hello,World", fp);
    fgetpos(fp, &position);
    fsetpos(fp, &position);
    fputs("继续写入", fp);
    fclose(fp);
}

6:long int ftell(FILE *stream) 返回stream的当前文件位置int fseek(FILE *stream, long int offset, int whence) 设置流 stream 的文件从whence偏移offset的字节,成功则该函数返回零,whence包括:文件的开头SEEK_SET,文件指针的当前位置SEEK_CUR,文件的末尾SEEK_END

void rewind(FILE *stream) 设置stream 文件位置到文件的开头

FILE *fp;
                int len;
                fp = fopen("file.txt", "w+");
                if (fp)
                {
                    fputs("AABBCC", fp);
                    len = ftell(fp); //6
                    fseek(fp, 7, SEEK_CUR);
                    len = ftell(fp); //6+7
                    fputs(" DD EE FF", fp);
                    len = ftell(fp); //
                    rewind(fp);
                    len = ftell(fp);//0
                    fclose(fp);
                }
                

 

7:sprintf() 与sscanf() snprintf()

int sprintf(char *str, const char *format, ...) 格式化组合字符串到str

int sscanf(const char *str, const char *format, ...) 格式化拆分字符串
int snprintf(char *str, size_t size, const char *format, ...)格式化组合字符串到str,size 为要写入的字符的最大数目,超过 size 会被截断。

    const char str[256] = { 0 };
    sprintf(str, "a = %d,b = %f ", 10, 2.13f);
    printf("%s", str); //a = 10,b = 2.130000
char name[128] = { 0 };
int age =  0 ;
int  classnum = 0 ;
const char info[] = { "peat 25 2" };
sscanf(info,"%s %d %d ", name,&age, &classnum);
printf("name : %s ,age : %d ,classnum : %d", name,age,classnum); //name : peat, age : 25, classnum : 2
const char str[256] = { 0 };
snprintf(str,5, "a = %d,b = %f ", 10, 2.13f);//实际写入size-1个并添加一个字符串结束符 \0
printf("%s", str);

8:int setvbuf()定义流 stream的缓冲类型,如果成功,则该函数返回 0,setvbuf(FILE *stream, char *buffer, int mode, size_t size)

buffer -- 这是分配给用户的缓冲。如果设置为 NULL,该函数会自动分配一个指定大小的缓冲。
mode -- 这指定了文件缓冲的模式:
_IOFBF:全缓冲
_IOLBF:行缓冲
_IONBF:无缓冲

                        char buf[BUFSIZ];
             FILE *fp;
             fp = fopen("file.txt", "w+");
             if (fp)
             {
                 setvbuf(fp, buf, _IOFBF, BUFSIZ);
                 fprintf(fp, "%s", "第一条信息");
                 fprintf(fp, "%s", "www");
                 fprintf(fp, "%s", "结尾");
                 fflush(fp); //刷新流
                 fclose(fp);
             }

9:

char *tmpnam(char *str) 生成并返回一个有效的临时文件名
FILE *tmpfile(void) 以二进制更新模式(wb+)创建临时文件。

 

posted @ 2020-10-24 17:39  Monday1024  阅读(204)  评论(0)    收藏  举报