C语言文件操作

常见硬件设备所对应的文件

文件 硬件设备

stdin 标准输入文件,一般指键盘;scanf()、getchar() 等函数默认从 stdin 获取输入。

stdout 标准输出文件,一般指显示器;printf()、putchar() 等函数默认向 stdout 输出数据。

stderr 标准错误文件,一般指显示器;perror() 等函数默认向 stderr 输出数据(后续会讲到)。

stdprn 标准打印文件,一般指打印机。

文件流

数据从文件复制到内存的过程叫做输入流,从内存保存到文件的过程叫做输出流

文件的操作

操作文件之前必须先打开文件;所谓“打开文件”,就是让程序和文件建立连接的过程

标准输入文件 stdin(表示键盘)、标准输出文件 stdout(表示显示器)、标准错误文件 stderr(表示显示器)是由系统打开的,可直接使用。

打开文件

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

filename为文件名(包括文件路径),mode为打开方式,它们都是字符串。

fopen() 会获取文件信息,包括文件名、文件状态、当前读写位置等,并将这些信息保存到一个 FILE 类型的结构体变量中,然后将该变量的地址返回

如果希望接收 fopen() 的返回值,就需要定义一个 FILE 类型的指针

FILE *fp = fopen("demo.txt", "r");

表示以“只读”方式打开当前目录下的 demo.txt 文件,并使 fp 指向该文件,这样就可以通过 fp 来操作 demo.txt 了。fp 通常被称为文件指针

判断文件是否打开成功

打开文件出错时,fopen() 将返回一个空指针,也就是 NULL

FILE *fp;

if( (fp=fopen("D:\\demo.txt","rb") == NULL ){

printf("Fail to open file!\n");

exit(0); //退出程序(结束程序)

}

最基本的文件打开方式有以下几种:

控制读写权限的字符串(必须指明)

打开方式 说明

“r” 以“只读”方式打开文件。只允许读取,不允许写入。文件必须存在,否则打开失败。

“w” 以“写入”方式打开文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么清空文件内容(相当于删除原文件,再创建一个新文件)。

“a” 以“追加”方式打开文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么将写入的数据追加到文件的末尾(文件原有的内容保留)。

“r+” 以“读写”方式打开文件。既可以读取也可以写入,也就是随意更新文件。文件必须存在,否则打开失败。

“w+” 以“写入/更新”方式打开文件,相当于w和r+叠加的效果。既可以读取也可以写入,也就是随意更新文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么清空文件内容(相当于删除原文件,再创建一个新文件)。

“a+” 以“追加/更新”方式打开文件,相当于a和r+叠加的效果。既可以读取也可以写入,也就是随意更新文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么将写入的数据追加到文件的末尾(文件原有的内容保留)。

控制读写方式的字符串(可以不写)

打开方式 说明

“t” 文本文件。如果不写,默认为"t"。

“b” 二进制文件。

r(read):

读 w(write):

写 a(append):

追加 t(text):

文本文件 b(binary):

二进制文件

+:读和写 关闭文件 fclose(fp);(fp为文件指针)

实例

#include

#include

#define N 100

int main() {

FILE *fp;

char str[N + 1];

//判断文件是否打开失败

if ( (fp = fopen("d:\\demo.txt", "rt")) == NULL ) {

puts("Fail to open file!");

exit(0);

}

//循环读取文件的每一行数据

while( fgets(str, N, fp) != NULL ) {

printf("%s", str);

}

//操作结束后关闭文件

fclose(fp);

return 0;

}

C语言fgetc(读)和fputc(写)函数用法详解(以字符形式读写文件)

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

#include

int main(){

FILE *fp;

char ch;

//如果文件不存在,给出提示并退出

if( (fp=fopen("D:\\demo.txt","rt")) == NULL ){

puts("Fail to open file!");

exit(0);

}

//每次读取一个字节,直到读取完毕

while( (ch=fgetc(fp)) != EOF ){

putchar(ch);

}

putchar('\n'); //输出换行符

//ferror() 函数用来判断文件操作是否出错

//出错时返回非零值,否则返回零值

if(ferror(fp)){

puts("读取出错");

}else{

puts("读取成功");

}

fclose(fp);

return 0;

}

从键盘输入字符,写入文件

#include

int main(){

FILE *fp;

char ch;

//判断文件是否成功打开

if( (fp=fopen("D:\\demo.txt","wt+")) == NULL ){

puts("Fail to open file!");

exit(0);

}

printf("Input a string:\n");

//每次从键盘读取一个字符并写入文件

while ( (ch=getchar()) != '\n' ){

fputc(ch,fp);

}

fclose(fp);

return 0;

}

C语言fgets(读)和fputs(写)函数的用法详解(以字符串的形式读写文件)

文件操作

示例 一行一行的读取文件

#include

#include

#define N 100

int main(){

FILE *fp;

char str[N+1];

if( (fp=fopen("d:\\demo.txt","rt")) == NULL ){

puts("Fail to open file!");

exit(0);

}

while(fgets(str, N, fp) != NULL){

printf("%s", str);

}

fclose(fp);

return 0;

}

在文件最后追加一个字符串

#include

int main(){

FILE *fp;

char str[102] = {0}, strTemp[100];

if( (fp=fopen("D:\\demo.txt", "at+")) == NULL ){

puts("Fail to open file!");

exit(0);

}

printf("Input a string:");

gets(strTemp);

strcat(str, "\n");

strcat(str, strTemp);

fputs(str, fp);

fclose(fp);

return 0;

}

C语言fread(读)和fwrite(写)的用法详解(以数据块的形式读写文件)

size_t fread ( void *ptr, size_t size, size_t count, FILE *fp );

size_t fwrite ( void * ptr, size_t size, size_t count, FILE *fp );

ptr 为内存区块的指针,它可以是数组、变量、结构体等。fread() 中的 ptr 用来存放读取到的数据,fwrite() 中的 ptr 用来存放要写入的数据。

size:表示每个数据块的字节数。

count:表示要读写的数据块的块数。

fp:表示文件指针。

理论上,每次读写 size*count 个字节的数据。

示例】从键盘输入两个学生数据,写入一个文件中,再读出这两个学生的数据显示在屏幕上。

#include

#define N 2

struct stu{

char name[10]; //姓名

int num; //学号

int age; //年龄

float score; //成绩

}boya[N], boyb[N], *pa, *pb;

int main(){

FILE *fp;

int i;

pa = boya;

pb = boyb;

if( (fp=fopen("d:\\demo.txt", "wb+")) == NULL ){

puts("Fail to open file!");

exit(0);

}

//从键盘输入数据

printf("Input data:\n");

for(i=0; i

scanf("%s %d %d %f",pa->name, &pa->num,&pa->age, &pa->score);

}

//将数组 boya 的数据写入文件

fwrite(boya, sizeof(struct stu), N, fp);

//将文件指针重置到文件开头

rewind(fp);

//从文件读取数据并保存到数据 boyb

fread(boyb, sizeof(struct stu), N, fp);

//输出数组 boyb 中的数据

for(i=0; i

printf("%s %d %d %f\n", pb->name, pb->num, pb->age, pb->score);

}

fclose(fp);

return 0;

}

获取文件大小

//获取文件大小

#include

/// 判断文件是否存在

bool is_exist_file_(std::string&& str_file)

{

struct stat st;

return (0 == stat(str_file.c_str(), &st));

}

int main()

{

std::string str = "F:\\demo.txt";

bool is_exist = is_exist_file_(std::move(str));

if (!is_exist)

return 0;

FILE* pfile = nullptr;

int ret = fopen_s(&pfile, str.c_str(), "rb");

/// 0 = 打开成功,

if (0 == ret)

{

if (pfile)

{

/// 将文件指针移动到文件尾

fseek(pfile, 0, SEEK_END);

unsigned int file_length_bytes = ftell(pfile);

fclose(pfile);

pfile = nullptr;

std::cout << "the length of the file is " << file_length_bytes << "\n";

}

else

{

;/// pfile 文件指针为null

}

}

else

{

;/// 打开失败

}

std::cout << is_exist << "\n";

}

C语言插入、删除、更改文件内容

[https://blog.csdn.net/Neutionwei/article/details/109394920]

标签:fp,文件,str,C语言,FILE,操作,fopen,读取

来源: https://blog.csdn.net/hollp_to/article/details/114628156

c语言创建文件存放,C语言文件操作相关推荐

  1. c语言创建windows进程,C语言实现在windows服务中新建进程的方法

    本文实例讲述了C语言实现在windows服务中新建进程的方法.分享给大家供大家参考.具体如下: 运行环境:visual stdio 2008 文件名:testService.c #include #i ...

  2. linux node 文件存放目录_Linux文件与目录结构

    在了解Linux系统目录结构之前应首先了解最为重要的一点: Linux系统中一切皆文件!!! 目录结构简介 命令与简介之间用":"分割,简介结束用"."表示. ...

  3. 网页文件是用html语言创建的文本文件,把txt文件变成html网页文件

    如果您看过<HTML是什么?--零基础自学网页制作>这篇教程,请按照其中说明创建一个txt文件.具体过程如下: step1:在您方便的磁盘中建立一个文件夹,命名为"零基础自学网页 ...

  4. C语言创建删不掉的文件夹

    上一篇博客写了一个杀不死的进程,现在再写一个删不掉的文件夹(文件同理),所谓删不掉不是真的删不掉而是删掉后马上重新创建.代码如下: #include <stdio.h> #include ...

  5. c语言创建写入和读取TXT文件数据

    下面是一个简单文件读取程序,首先是写数据,将数字0~9写入到data.txt文件中,然后再从data.txt中读取数据,将读到的数据存到数组a[10]中,并且打印到控制台上. 下面是程序: [cpp] ...

  6. C语言创建指定大小的txt文件

    近来需要测试网络的下载速率,自己搭了个服务器,好让客户端可以从服务器下载文件测试下载性能.需要准备些固定大小的文件,例如600k.4M等大小的文件. 思路很简单,C中一个 char类型占 1 byte ...

  7. 创建用于存放备份还原文件的网络文件夹(DPM配置管理系列七)

    请在用于存储的服务器中创建备份还原文件的网络共享文件夹,如下图所示: 转载于:https://blog.51cto.com/tingdongwang/895589

  8. C语言中低位存放,C语言 大端小端存储解析以及判断方法

    当我们在C语言中查看数据在内存中的存储时,我们经常会发现一个很奇怪的现象,什么现象呢? 例如下面这段代码 int main() { int i = 1; return 0; } 数据在内存中的存放方式 ...

  9. php文件便利,PHP便利文件夹下所有文件,创建压缩包

    把所有文件保存在$file_array的数组中,然后对其进行操作,然后压缩文件zip,进行下载. $dir="文件路径"; //这里输入其它路径 //PHP遍历文件夹下所有文件 $ ...

最新文章

  1. 使用 JQUERY 为文本框增加提示文字
  2. mysql install语句_mysql8 参考手册--INSTALL COMPONENT语句
  3. 1000万粉丝女主播一年从未露脸,网友爆出嘴唇照,比腐团儿还好看
  4. muduo网络库学习(三)定时器TimerQueue的设计
  5. 订餐系统之Excel批量导入
  6. php substr_replace 中文乱码,php substr_replace替换字符串一些实例_PHP教程
  7. C# 页面关联类似模式窗口
  8. 基于android的交流平台,基于Android的移动学习交流平台的设计与实现
  9. C++语言基础 —— STL —— 容器与迭代器 —— vector
  10. Linux管理员常用的组合命令
  11. vga分辨率与时序配置
  12. mysql 删除恢复_MySQL之delete 忘加where条件误删除恢复
  13. javaweb学生竞赛管理系统
  14. Postgresql默认用户名与密码
  15. python dataframe如何设置并处理(删除、填充)空值
  16. wincc脚本打印斑马打印机条码,斑马打印机接口
  17. 【云计算】CentOS7 上配置Openstack(单机)bug记录
  18. 余江php,余江通报9起违纪案例,其中这个局竟然有8起
  19. vue中实现图片下载到本地
  20. E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?

热门文章

  1. 2019学位计算机模拟试题,2019年成人学位英语测试试卷(一)和试卷(二)
  2. 如何实现登录互踢 即如何实现当用户登录之后 如果在其他地方再次登录 则这边的用户自动退出系统...
  3. CLI, CILCLR
  4. 得了糖尿病,千万不能这么做
  5. IFE_js_task03
  6. 《Python编程从入门到实践》_第二章_变量和简单数据类型
  7. 记忆mySQL增删改查
  8. 用C语言计算水分子的个数
  9. 基于 Arduino 高精度简易桌面钟(Oled/DS3231)
  10. Docker遇到的一些问题