c语言创建文件存放,C语言文件操作

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值