C语言文件IO

以下是一个使用fopen()、fwrite()、fread()、fscanf()、fprintf()、feof()、fseek()函数操作一个文档的示例代码:```c

#include <stdio.h>

int main() {
    FILE *fp;
    char buffer[100];
    int num;
    float fnum;

    // 打开文件
    fp = fopen("test.txt", "w+");
    if (fp == NULL) {
        printf("Failed to open file.\n");
        return 1;
    }

    // 写入数据
    fprintf(fp, "Hello, world!\n");
    num = 12345;
    fwrite(&num, sizeof(int), 1, fp);
    fnum = 3.14159;
    fwrite(&fnum, sizeof(float), 1, fp);

    // 移动文件指针到文件开头
    fseek(fp, 0, SEEK_SET);

    // 读取数据
    fgets(buffer, 100, fp);
    printf("%s", buffer);
    fread(&num, sizeof(int), 1, fp);
    printf("%d\n", num);
    fread(&fnum, sizeof(float), 1, fp);
    printf("%f\n", fnum);

    // 关闭文件
    fclose(fp);

    return 0;
}

在上面的例子中,我们打开了一个名为"test.txt"的文件,并使用feof()函数在while循环中检查文件指针是否已经到达文件末尾。如果文件指针没有到达文件末尾,我们就使用fgetc()函数读取一个字符并输出它。最后,我们关闭了文件并返回0。
```

代码中使用了以下函数:

1. `fopen()`函数:

打开文件,返回文件指针。第一个参数为文件名,第二个参数为打开方式。打开方式可以是"w+"(读写模式,如果文件不存在则创建文件)或"r+"(读写模式,如果文件不存在则打开失败)等。注意,如果打开文件失败,返回值为NULL。

2. `fwrite()`函数:

向文件写入数据。第一个参数为要写入的数据的指针,第二个参数为每个数据的大小,第三个参数为要写入的数据个数,第四个参数为文件指针。注意,写入的数据类型和大小必须与函数参数对应,否则可能会导致数据写入错误。

3. `fread()`函数:

从文件读取数据。第一个参数为要读取的数据的指针,第二个参数为每个数据的大小,第三个参数为要读取的数据个数,第四个参数为文件指针。注意,读取的数据类型和大小必须与函数参数对应,否则可能会导致数据读取错误。

4. `fprintf()`函数:

向文件写入格式化数据。第一个参数为文件指针,第二个参数为格式化字符串,后面的参数为要写入的数据。注意,写入的数据类型和格式化字符串中的格式符必须对应,否则可能会导致数据写入错误。

5. `fscanf()`函数:

从文件读取格式化数据。第一个参数为文件指针,第二个参数为格式化字符串,后面的参数为要读取的数据的指针。注意,读取的数据类型和格式化字符串中的格式符必须对应,否则可能会导致数据读取错误。

6. `feof()`函数:

判断文件指针是否已到达文件末尾。如果已到达文件末尾,返回非0值;否则返回0。

7. `fseek()`函数:

移动文件指针。第一个参数为文件指针,第二个参数为偏移量,第三个参数为起始位置。起始位置可以是SEEK_SET(文件开头)、SEEK_CUR(当前位置)或SEEK_END(文件末尾)。注意,如果移动文件指针失败,可能会导致读写文件出错。

8.feof()函数

feof()函数用于检查文件指针是否已经到达文件末尾。下面是一个使用feof()函数的例子:```c

#include <stdio.h>

int main() {
    FILE *fp;
    char c;

    fp = fopen("test.txt", "r");

    if (fp == NULL) {
        printf("Error: Unable to open file.\n");
        return 1;
    }

    while (!feof(fp)) {
        c = fgetc(fp);
        putchar(c);
    }

    fclose(fp);

    return 0;
}


```

9.C 库函数 char *fgets(char *str, int n, FILE *stream) 

从指定的流 stream 读取一行,并把它存储在 str 所指向的字符串内。当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。

参数

str -- 这是指向一个字符数组的指针,该数组存储了要读取的字符串。

n -- 这是要读取的最大字符数(包括最后的空字符)。通常是使用以 str 传递的数组长度。

stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了要从中读取字符的流。

返回值

如果成功,该函数返回相同的 str 参数。如果到达文件末尾或者没有读取到任何字符,str 的内容保持不变,并返回一个空指针。

如果发生错误,返回一个空指针。

实例

#include <stdio.h>



int main()

{

   FILE *fp;

   char str[60];



   /* 打开用于读取的文件 */

   fp = fopen("file.txt" , "r");

   if(fp == NULL) {

      perror("打开文件时发生错误");

      return(-1);

   }

   if( fgets (str, 60, fp)!=NULL ) {

      /* 向标准输出 stdout 写入内容 */

      puts(str);

   }

   fclose(fp);

  

   return(0);

}

10. int fputs(const char *str, FILE *stream)

C 库函数 int fputs(const char *str, FILE *stream) 把字符串写入到指定的流 stream 中,但不包括空字符。

参数

  • str -- 这是一个数组,包含了要写入的以空字符终止的字符序列。
  • stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了要被写入字符串的流。

返回值

该函数返回一个非负值,如果发生错误则返回 EOF

实例

下面的实例演示了 fputs() 函数的用法。

#include <stdio.h>

int main ()
{
   FILE *fp;

   fp = fopen("file.txt", "w+");

   fputs("这是 C 语言。", fp);
   fputs("这是一种系统程序设计语言。", fp);

   fclose(fp);
   
   return(0);
}

需要注意的是,操作文件时要确保文件存在且对文件有足够的访问权限,否则可能会导致打开文件失败或读写文件出错。另外,在使用fwrite()和fread()函数时,要注意字节序的问题,否则可能会导致数据读取错误。

练习实例:

#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>

int main()
{
    FILE* fp;
    int num = 3;
    double dnum = 3.1415926;
//malloc函数返回void*指针,参数只有一个
    void* a = malloc(sizeof(char)*255);
//memset按字节初始化a为0
    memset(a,0,255);
    fp = fopen("note.txt", "a+");
    if(fp == NULL)
    {
        fprintf(stderr, "open file error\n");
        printf("%s\n", strerror(errno));
    }
/*     fprintf(fp, "hello world3\n");

    rewind(fp);
    //fseek(fp, 6, SEEK_SET);
   // fp = fopen("note.txt", "r+");
// %[^\n]遇到非换行符的字符输出
    fscanf(fp, "%[^\n]", a);
    printf("%s\n", a); */
//将文件指针放在首位,还有SEEK_CUR/SEEK_END
    fseek(fp, 0, SEEK_SET);
    fwrite(&num, sizeof(int), 1, fp);
    fseek(fp, 0, SEEK_END);
    fwrite(&dnum, sizeof(double), 1, fp);
//重置文件指针
    rewind(fp);
    fread(a, sizeof(int), 1, fp);
    printf("%d,%d\n", sizeof(num), sizeof(dnum));
    printf("%d\n", *((int*)a));
//文件指针相对初始位置往后偏移4位,成功返回0,失败返回负一
    fseek(fp, 4, SEEK_SET);
    fread(a, sizeof(double), 1, fp);
    printf("%lf\n", *((double*)a));
    free(a);
    
    fclose(fp);
    

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值