C语言以字符形式读写文件

一、字符读取函数 fgetc

(一)、函数介绍

fgetc 是 file get char 的缩写,意思是从指定的文件中读取一个字符。函数原型为:

int fgetc(FILE* fp)

fp 为文件指针。fgetc() 读取成功时返回读取到的字符,读取到文件末尾或读取失败时返回 EOF

在文件内部有一个位置指针,用来指向当前读写到的位置,也就是读写到第几个字节。在打开文件时,该指针总是指向文件的第一个字节。使用fgetc函数后,该指针会向后移动一个字节,可以连续多次使用fgetc 读取多个字符。

(二)、使用 fgetc 读取文件实例

文件 test.txt 中有以下内容:

I am Test.txt!
我是被读取的文件。
test。。。

现在使用 fgetc函数将文件中的内容读取出来,程序如下:

// c 语言以字符形式读取文件(ANSI编码)
#include <stdio.h>
int main()
{
    FILE* fp;
    char ch;
    fp = fopen("./test.txt", "r");
    if (NULL != fp)
    {
        while (EOF != (ch=fgetc(fp)) )
        {
            putchar(ch);
        }
        printf("\n");
        return 1;
    }

    return 0;
}

程序运行结果如下图所示:

二、字符写入函数 fputc

(一)、函数介绍

? fputc 是 file output char 的缩写,意思是向指定的文件中写入一个字符。函数原型为:

int fputc(int ch, FILE* fp);

ch 为要写入的字符,fp 为文件指针。 fputc() 写入成功时返回写入的字符,失败时返回 EOF,返回值为 int 也是为了容纳这个负数。

写入文件时需要注意一下两点:

  • 被写入的文件可以用写,读写,追加方式打开,用写或者读写方式打开一个已存在的文件时将清除原有文件的内容,并将写入的字符放在文件的开头。如需保留原有文件的内容,并把写入的字符放在文件的结尾,就必须使用追加的方式打开。不管以何种方式打开,被写入的文件若不存在时则创建该文件。
  • 每写入一个字符,文件内部位置指针向后移动一个字节。

(二)、使用 fputc 写入文件实例

下面的程序实现创建文件 fputctest.txt ,然后从键盘获取输入字符并使用 fputc 函数将输入的字符写入文件中。最后再使用 fgetc 将写入文件中的内容读取出来。

#include <stdio.h>

int main()
{
    FILE* fp;
    char ch;
    fp = fopen("./fputctest.txt", "wt+");  //以读写方式打开文件,文件不存在则创建
    if (NULL == fp)
    {
        printf("open file failed!\n");
        return 1;
    }
    // 每次从键盘读取一个字符写入文件
    printf("开始写入文件:\n");
    while ((ch =getchar()) != '\n')
    {
        fputc(ch, fp);
    }

    rewind(fp);  // 将文件指针重新指向文件头
    printf("\n开始读取文件:\n");
    if (NULL != fp)
    {
        while (EOF != (ch = fgetc(fp)))
        {
            putchar(ch);
        }
        printf("\n");
        return 1;
    }

    fclose(fp);
    return 0;
}

程序运行结果如下:

原文地址:https://www.cnblogs.com/ay-a/p/9484564.html

时间: 2024-10-04 19:56:21

C语言以字符形式读写文件的相关文章

使用go语言绕过page cache读写文件

有时候,我们希望我们的数据不通过page cache的缓冲直接落盘.go语言里,用参数DIRECT打开文件可以实现这一点要求. 但这样做有一个硬性的要求,就是在读写的时候,对应的数据在内存中的地址一定要满足512对齐,即首地址的2进制形式中后面至少要有9个0结尾,且数据长度为512字节的整数倍,否则读写会失败. 我们用go语言中的切片slice来验证这件事. 首先我们建立一个go语言的切片并随便赋一些值: buf := make([]byte, 8192) for i := 0; i < 20;

Java之字符流读写文件、文件的拷贝

字符流读数据 – 按单个字符读取 创建字符流读文件对象: Reader reader = new FileReader("readme.txt"); 调用方法读取数据: int data = reader.read(); // 读取一个字符,返回该字符代表的整数,若到达流的末尾,返回-1 字符流读数据 – 按字符数组读取 创建字符流读文件对象: Reader reader = new FileReader("readme.txt"); 调用方法读取数据: // 读取

Java 字符流读写文件

据说,java读写文件要写很多,贼麻烦,不像c艹,几行代码就搞定.只能抄抄模板拿来用了. 输入输出流分字节流和字符流.先看看字符流的操作,字节转化为字符也可读写. 一.写入文件 1.FileWriter类: FileWriter fw=new FileWriter("hello");//在workspace工作空间里创建文件,文件名为hello FileWriter fw=new FileWriter("E:\\hello");//在E盘创建文件,文件名为hello

C语言学习010:fopen读写文件

在文件input.csv文件中,我们有数据如下 Apple Pear Litchis Pineapple Watermelon 现在我们将input.csv文件下的读取并写入到output.csv文件,我们会用到fopen函数 函数原型:FILE * fopen(const char * path,const char * mode) 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5

RandomAccessFileDemo1~2 读写文件的方法

RandomAccessFileDemo1 写文件的方法 /** *    文件操作 --- RandomAccessFile *    Java提供了一个可以对文件随机访问的操作,访问包括读和写操作.基于指针形式读写文件数据. *    该类名为RandomAccessFile.该类的读写是基于指针的操作. RandomAccessFile支持两种创建模式 只读模式:仅对文件数据进行读取工作 读写模式:对文件数据读写操作 常用构造方法 RandomAccessFile(File file,St

[C/C++语言基础]读写文件

1.打开.关闭文件: FILE* fp = fopen(string.c_str(), FLAG); string.c_str():需用C语言字符串形式: FLAG说明: r: 只读方式打开: w: 只写方式打开: a:追加方式打开: r+: 以读/写方式打开:(无文件:出错) w+: 以读/写方式打开:(无文件:新建) int fclose(FILE* fp); 成功:返回0: 失败:返回EOF: 2.读写文件: char *fgets(char *s, int n, FILE *stream

Python模块、字符编码、文件读写

模块 当我们用一种语言开始真正的软件开发室,除了编写代码外,还需要很多基本的已经写好的现成的东西,高级语言通常都会为我们提供了一个比较完善的基础代码库,让我们能直接调用,python也不例外,为我们提供了分成完善的基础代码和第三方库.在python中一个.py文件就是一个模块. 模块导入使用import 获取随机数模块 调用系统命令 把执行脚本时传递的参数获取到了 当我们试图加载一个模块时,Python会在指定的路径下搜索对应的.py文件,如果找不到,就会报错,默认情况下,Python解释器会搜

C语言顺序读写文件

if((fp=fopen(“D:\\文件.txt”,”w”))==NULL) //以写入的方式创建文件,并指定了文件的位置 fopen(文件名,使用方式) { printf(“The file can’t be open”); //不能创建则输出不能打开此文件,但一般都是可以创建的 exit(0); //exit(0)在头文件<stdlib.h> } FILE *fp //定义fp是一个指向FILE类型数据的指针变量 fgetc(fp) //从fp指向的文件读入一个字符 fputc(ch,fp

Python自动化--语言基础4--模块、文件读写、异常

模块1.什么是模块?可以理解为一个py文件其实就是一个模块.比如xiami.py就是一个模块,想引入使用就在代码里写import xiami即可2.模块首先从当前目录查询,如果没有再按path顺序逐一查询(sys.path)3.一个模块只会被导入一次. 模块的导入方式:0.import sys 导入模块1.from sys import path from语句从模块中导入一个指定的部分(提倡的写法)2.from …… import * 把一个模块的所有内容全都导入(建议不要用这种) 3.from