c语言文件操作插入

文件导入文件夹c语言是什么

操作文件的正确流程为:打开文件 — 读写文件 — 关闭文件。文件在进行读写操作之前要先打开,使用完毕要关闭。

所谓打开文件,就是获取文件的有关信息,例如文件名、文件状态、当前读写位置等,这些信息会被保存到一个 FILE 类型的结构体变量中。关闭文件就是断开与文件之间的联系,释放结构体变量,同时禁止再对该文件进行操作。

在C语言中,文件有多种读写方式,可以一个字符一个字符地读取,也可以读取一整行,还可以读取若干个字节。文件的读写位置也非常灵活,可以从文件开头读取,也可以从中间位置读取。

文件流

所有的文件(保存在磁盘)都要载入内存才能处理,所有的数据必须写入文件(磁盘)才不会丢失。数据在文件和内存之间传递的过程叫做文件流,类似水从一个地方流动到另一个地方。数据从文件复制到内存的过程叫做输入流,从内存保存到文件的过程叫做输出流。

文件是数据源的一种,除了文件,还有数据库、网络、键盘等;数据传递到内存也就是保存到C语言的变量(例如整数、字符串、数组、缓冲区等)。我们把数据在数据源和程序(内存)之间传递的过程叫做数据流(Data Stream)。相应的,数据从数据源到程序(内存)的过程叫做输入流(Input Stream),从程序(内存)到数据源的过程叫做输出流(Output Stream)。

输入输出(Input output,IO)是指程序(内存)与外部设备(键盘、显示器、磁盘、其他计算机等)进行交互的操作。几乎所有的程序都有输入与输出操作,如从键盘上读取数据,从本地或网络上的文件读取数据或写入数据等。通过输入和输出操作可以从外界接收信息,或者是把信息传递给外界。

我们可以说,打开文件就是打开了一个流。

C语言文件操作教程:

【C语言精华】超详细C语言文件操作知识点,打开文件、读取和追加数据、插入和删除数据、关闭文件、删除文件等_哔哩哔哩_bilibili

发布于 8 月前著作权归作者所有

用C语言编写的关于文件的行操作程序(行插入,行删除,活区切换,活区显示)

#define NULL 0

#define OK 0

#include stdio.h

#include stdlib.h

#include string.h

#include ctype.h

#include conio.h

typedef struct text

{

char string[80];//存储每一行的元素

struct text *next;//指向后一个节点的指针

struct text *pre;//指向前一个节点的指针

int num;//每一行元素的长度

int flat;//确定此行是否被删除的标志

}text;

FILE *fp,*out;//fp是执行被打开的文件,out指向被写入的文件

text *head;//链表的头指针

int n=0,sum,delnum,xiugai=0,page=0;

//修改用来指示文件是否被修改过,如果修改过才回存盘。page用来计算显示的

//页数.delnum用来存储被删除的字节数,sum存储一页的总字节数

void byebye()//没有具体用处,只是写着玩的,在屏幕上显示一个bye

{

puts(“\t\t\t******** * * ********”);

puts(“\t\t\t* * * * * “);

puts(“\t\t\t* * * * * “);

puts(“\t\t\t* * * * * “);

puts(“\t\t\t******** * ********”);

puts(“\t\t\t* * * * “);

puts(“\t\t\t* * * * “);

puts(“\t\t\t* * * * “);

puts(“\t\t\t******** * ********”);

}

void HELP()//帮助函数,显示一些命令的格式

{

printf(“\n\t**********************************************************\n”);

printf(“\t** 打开文件: o行号文件名回车 **\n”);

printf(“\t** 行插入格式: i行号回车文本回车 **\n”);

printf(“\t** 行删除格式: d行号1[空格行号2]回车 **\n”);

printf(“\t** 活区切换格式: n回车 **\n”);

printf(“\t** 活区显示格式: p回车 **\n”);

printf(“\t** 注意:在执行所有命令前必须先用o命令打开文件,并 **\n”);

printf(“\t** 用p命令显示出来!!! **\n”);

printf(“\t**********************************************************\n”);

system(“pause”);

printf(“\n\n\n”);

}

void ABOUT()//也是写着玩的

{

printf(“\n\t\t*****************************************\n”);

printf(“\t\t** 作者:BLACKCAT **\n”);

printf(“\t\t** 单位:ZZU **\n”);

printf(“\t\t** E-mail:blackcat242@etang.com **\n”);

printf(“\t\t*****************************************\n”);

system(“pause”);

system(“cls”);

printf(“\n\n\n”);

}

void Createlist()//建立一个十个节点的链表,是文本中的一页

{

text *p1,*p2;

p1=p2=(text *)malloc(sizeof(text));

head=NULL;

while(n10)

{

n=n+1;

if(n==1) head=p1;

else

{

p2-next=p1;

p1-pre=p2;

p1-flat=0;

}

p2=p1;

p1=(text *)malloc(sizeof(text));

}

p2-next=NULL;

}

void freemem()//释放链表所占的内存

{

text *p;

for(p=head;head!=NULL;)

{

head=p-next;

free(p);

p=head;

}

}

int Openfiles()//打开文件的函数

{

char name[30],outname[30];

puts(“请输入要打开的文件名:”);

scanf(“%s”,name);

if((fp=fopen(name,”r+”))==NULL)

{

printf(“打不开原文件! \n”);

exit(0);

}

puts(“请输入要写入的文件名:”);

scanf(“%s”,outname);

if((out=fopen(outname,”w+”))==NULL)

{

printf(“打不开目标文件!\n”);

exit(0);

}

return 0;

}

int display()//从文件中读入到链表中,并显示出来

{

int i;

char conti=’y’;

text *p;

while((!feof(fp))(conti==’y’||conti==’Y’))

{

page++;

printf(“\t\t第%d页\n”,page);

for(i=0,p=head,sum=0;(i10)(!feof(fp));i++,p=p-next)

{

fgets(p-string,sizeof(p-string),fp);

puts(p-string);

p-flat=1;

p-num=strlen(p-string);

sum=sum+p-num;

}

puts(“Continue?(Y/N):”);

conti=getche();

if(feof(fp))

{

puts(“\n文件已经结束!”);

return 0;

}

}

return 0;

}

int saveanddisplay(int hang)//命令n执行的函数,用来将活区的内容显示并读入下一页内容

{

int i,endflat=0;

char conti=’y’;

text *p=NULL;

page++;

for(i=0,p=head;ihang;i++,p=p-next) //将活区写入文件

if(p-flat==1)

{

fputs(p-string,out);

p-flat=0;

}

if(!feof(fp))

printf(“\t\t第%d页\n”,page);

for(i=0,p=head,sum=0;(i10)(!feof(fp));i++,p=p-next)//从文件读入活区

if(fgets(p-string,sizeof(p-string),fp))

{

puts(p-string);

p-flat=1;

p-num=strlen(p-string);

sum=sum+p-num;

}

if(feof(fp))

printf(“文件已经结束!”);

return 0;

}

int saveall()//退出编辑函数后执行的函数,将所有的内容存盘

{

int i,endflat=0;

char conti=’y’;

text *p;

for(i=0,p=head;i10;i++,p=p-next) //将活区写入文件

if(p-flat==1)

{

fputs(p-string,out);

p-flat=0;

}

while(!feof(fp))//将其余的内容写入文件

fputc(fgetc(fp),out);

return 0;

}

int del()//删除d命令对应的函数,用来删min-max中的行,用结构体中的flat表示是否被删除

{

text *p1,*p2,*p3;

int min,max,i;

xiugai=1;

scanf(“%d %d”,min,max);

if(head==NULL)

{

printf(“\nlist null!\n”);

return 0;

}

p1=p2=head;

for(i=0;imin-1;i++)/*找到要删除的第一行*/

p1=p1-next;

for(i=0;imax;i++)/*找到要删除的最后一行*/

p2=p2-next;

for(delnum=0;p1!=p2;p1=p1-next)/*删除中间的节点,将flat赋值0*/

{

p1-flat=0;

delnum=delnum+p1-num;

}

for(i=0,p3=head;i10;i++,p3=p3-next)//显示删除后的结果

if(p3-flat==1)

puts(p3-string);

saveanddisplay(10);//将删除后的结果存盘并显示下一页内容(十行)

xiugai=1;

return 0;

}

int insert()//插入i命令对应的函数,在i行后插入文本

{

int hang,i,increhang=1,number=1;

text *p,*p1,*p2;

xiugai=1;

scanf(“%d”,hang);

p=p1=NULL;

for(i=0,p1=head;ihang-1;i++,p1=p1-next);//找到要插入行的前一列

p=(text *)malloc(sizeof(text));//为插入行分配空间

p-flat=1;

p-next=p1-next;//从此行向下四行将插入行插入到链表中

p-pre=p1;

p1-next-pre=p;

p1-next=p;

p-string[0]=getchar();

p-string[0]=getchar();

for(i=1;(i80)(p-string[i-1]!=’^’);i++)

{

p-string[i]=getchar();

if((i+1==80)(p-string[i]!=’^’))//如果插入的内容超过一行

{ //的容量,则分配下一行空间

p1=p; //并将其连入链表

p=(text *)malloc(sizeof(text));

p-flat=1;

p-next=p1-next;

p-pre=p1;

p1-next-pre=p;

p1-next=p;

i=0;

increhang++;

}

p-num=i;

}

p-string[i-1]=’\n’;

p-string[i]=’\0′;

puts(“修改后的链表:”);

for(p2=head;p2!=NULL;p2=p2-next)//显示出修改后的链表

puts(p2-string);

saveanddisplay(10+increhang);//将修改后的链表存盘并显示下一页内容

xiugai=1;

return 0;

}

int EDIT()//编辑函数,用来接受处理编辑命令

{

char cmd;

do

{

cmd=getchar();

printf(“\n请输入命令(按E键退出):”);

cmd=getchar();

switch(cmd)

{

case ‘e’:

case ‘E’:

if(xiugai==1)

saveall();

freemem();

if(fp) fclose(fp);

if(out) fclose(out);

system(“cls”);

return 0;

case ‘o’:

case ‘O’:

Openfiles();

break;

case ‘p’:

case ‘P’:

Createlist();

display();

break;

case ‘n’:

case ‘N’:

saveanddisplay(10);

break;

case ‘d’:

case ‘D’:

del();

break;

case ‘i’:

case ‘I’:

insert();

break;

default:printf(“\n\n\n!!!输入错误!!!”);

}

}while(cmd!=’e’cmd!=’E’);

return 0;

}

int main()//主函数,用来接受命令

{

char cmd;

do

{

printf(“\n\t\t****************************\n”);

printf(“\t\t** 1 EDIT **\n”);

printf(“\t\t** 2 HELP **\n”);

printf(“\t\t** 3 ABOUT **\n”);

printf(“\t\t** 4 EXIT **\n”);

printf(“\t\t****************************\n”);

printf(“\n\n请选择1,2,3,4:”);

cmd=getche();

switch(cmd)

{

case ‘4’ : system(“cls”); byebye(); break;

case ‘2’ : system(“cls”); HELP(); cmd=0; break;

case ‘3’ : system(“cls”); ABOUT(); cmd=0; break;

case ‘1’ : EDIT(); cmd=0; break;

default : printf(“\n\n\n!!!输入错误!!!\n”);

}

}while(cmd!=’4′);

return 0;

}

c语言文件操作插入

c语言怎么将数据写入文件

利用VC软件通过代码书写就可以将数据写入文件。

首先打开VC++6.0。

选择文件,新建。

选择C++ source file 新建一个空白文档。

先声明头文件#include stdio.h。

写上主函数

void main

主要代码

FILE *infile,*outfile,*otherfile;

char input;

char inputs[10];

int i=0;

infile = fopen(“d:\\infile.txt”,”r+”);//用fopen函数打开文件

outfile = fopen(“d:\\outfile.txt”,”a+”);//用fopen函数打开文件

if ( !infile )

printf(“open infile failed….\n”);

if ( !outfile)

printf(“open outfile failed…\n”);

printf(“*********************************************\n”);

printf(“** This program is to show file operation! **\n”);

printf(“** The input file is:                      **\n”);

printf(“**                       d:\\infile.txt     **\n”);

printf(“** The contents in this file is:           **\n”);

printf(“\n”);

for(;;)

{

input = fgetc(infile);//死循环读出文件内容

printf(“%c”,input);

putc(input,outfile);//写入内容

i++;

if(input == ‘\n’ || input == EOF)

break;

}

fclose(infile);

fclose(outfile);

scanf(“%d”,i)

运行结果

C语言文件操作

照你那样说的插入是不太可能的,从底层看,文件一般都是通过重写插入删除数据的。

如果你要插入的话,就是把插入点之后的数据全都复制下来,然后写上要插入的东西,然后再把复制的数据全部粘上。

删除也是一样,把你要删除的数据用后面的数据覆盖上。

无论什么编辑器都是以这样的原理实现的。可能它们用了这样或那样的算法优化这一过程,但这一过程是不会变的(不只编辑器,OS也会对这一过程进行优化)。

所以,如果在文件的第一个字符插入或删除,那么效率是最低的。因为要写入最多的字符。下面是个实例。

比如文件中有以下字符

aaaaaa

bbbbbb

…………

zzzzzz

如果你要在第一行插入一个1的话,那么就要把这些所有的字符都复制到一个位置(可能是内存,也可能是磁盘),然后在第一个位置写上1,再把复制了的东西写在1之后。

如果你要删除aaaaaaa这一行的话,就是把bbbbb及之后的所有数据复制并写在a开始的位置上。

linux 系统中用C语言实现txt 文本文档插入任意行。

要用到文件操作命令咯 而且对文本文件还要进行相应的文本操作 比如你知道每行标志吧? \n 或者\r\n 还有\r 3种好像 比如windows的txt是\r\n为换行的吧 linux是什么我忘了 你查查看

下面是流程

打开文件 命令: fopen

读入文件到变量buff 命令: fread

找到的位置 = 查找文本(buff, 常量:换行符, 欲插入的行数, 实际返回的行数) //这个函数就是一个循环遍历计数换行符的位置 找到对应行的时候则返回字节位置

if(实际返回的行数!=欲插入的行数) //这情况比如 有1行文本 要插入第3行 最后返回2

{

设置文件指针位置 命令: fseek(忘了好像是这个)

int c = 欲插入的行数 – 实际返回的行数;

for(int i=0; ic; i++)

{

写出一个换行符 命令: fwrite //

}

}

//此时位置定好了

输出你需要输出的文本就OK了 命令: fwrite

最后关闭文件 命令: fclose

补充 可能你会先读取文件的大小 然后动态分配内存以保证内存不大不小的浪费 最后记的释放内存空间哦. 还有这个思路是临时写的 也不清楚有什么漏洞 你顺便锻炼锻炼自己吧. 我都不清楚是不是有哪步骤想错呢. 这个不难的呢. 加油!

可是我不是Linux系统 我用Windows系统写吧 代码差异不大 你是Linux系统吧? 先说清楚 因为换行标志可能不一样

百度hi 里面 我发我QQ 你加下吧 我写完你还要运行看看 那先手机QQ加我吧

我对谁很无奈?

C语言怎样对文件进行操作

我们运用C语言编写程序的时候,经常需要对文件进行操作。那么该如何实现呢?下面我给大家分享一下。

工具/材料

Sunlime Text

打开SublimeText软件,新建一个C语言文件,然后导入C语言库,如下图所示

接下来新建C语言的main函数,对文件的操作都会在main函数中进行,如下图所示

接下来调用C语言的fopen函数对文件进行打开操作,如下图所示

当打开文件以后就可以通过fgetc函数读取文件里面的内容,如下图所示

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月25日 09:04:58
下一篇 2024年3月25日 09:12:20

相关推荐

  • c语言eof输入,c语言eof什么意思

    c语言中EOF的用法 eof在c语言中表示文件结束符。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放。 EOF为End Of File的缩写,在操作系统中表示资料源无更多的资料可读取。 DO while notEOF(1)解释:判断当eof(1)的值为t…

    2024年5月21日
    2900
  • linux时区文件,linux时间时区

    linux修改系统时间命令 1、inux修改时间命令是date-s+时分秒。修改linux系统时间。root使用date指令:date -s 只修改日期,不修改时间,输入:date -s 2021-04-02。只修改时间,输入:date -s 12:00:00。 2、输入这条命令系统时间会设置为2018年11月21日17点39分。修改之后你可以输入date命…

    2024年5月21日
    5000
  • 文件夹导出excel文件怎么打开文件,文件导出怎么导

    360浏览器导出excel文件怎样可以直接打开而不要保存 1、建议:直接用excel打开。将excel文件另存为网页格式。 2、“工具”菜单的“选项”,打开360下载器,点下面的设置,里面有一项“直接打开文件后,保留文件”,去掉勾选就会打开后不保留文件。 3、工具菜单的下载器,打开30安全下载器,点右下角的设置,里面有一项“直接打开后,不保留文件”,取消其选…

    2024年5月21日
    3900
  • c语言嵌入sql,C语言嵌入式软件级别的优化有哪几种

    c语言中嵌入sql 1、找到提供c本版的接口。函数中调用接口。sql语句是字符串的形式输入的在c语言中。 2、数据库会提供访问方式, 例如ODBC和API。在C语言中将SQL语句封装后传给ODBC或API由他们完成对数据库的操作。SQL语句不是直接“嵌入”到C语言里的。具体方法要查看不同数据库的开发文档。 3、创建一个SQL文件。此文件在ISQL中创建,文件…

    2024年5月21日
    3100
  • c语言三个数求排序,c语言求各个位数上的数

    如何用函数实现三个数的排序(用的是C语言) 1、(1)定义数据类型,本实例中 a、b、c、t 均为基本整型。(2) 使用输入函数获得任意 3 个值赋给 a、b、c。 2、输入三个整数x,y,z,请把这三个数由小到大输出。 3、main(){ int a,b,c;int A,B,C;printf(输入三个数,以空格分开。 C语言编程题,从键盘输入任意3个数,按…

    2024年5月21日
    4000
  • excel2013文件损坏,excel 文件损坏

    如何解救excel被损坏的文件 1、Excel打开时遇到这个问题。打开一个新的Excel表格,点击左上角文件。选择“打开”选项。弹出的文本框中“打开”选项卡的右下角,选中“打开并修复”。 2、先打开电脑,然后打开电脑上面的excel。然后点击左上角的文件。然后点击打开。之后点击浏览。然后点击选中损坏的excel文档。然后点击打开边上的下拉箭头。弹出的界面,点…

    2024年5月21日
    3500
  • c语言合法变量名,c语言合法变量名和常量

    c语言的合法的变量名是 1、c语言的合法的变量名:其一,只能包含数字,字母,下划线。其二,不能以数字开头。其三,不能是C语言保留的关键字。 2、A:float与单精度的名称重合了,不选。B:3字开头,不选。C:合法变量名,选。D:有$,不选。 3、可以使用。合法的变量名由字母,数字和下划线组成组成第一位只能为字母或下划线不能和C语言保留字完全相同。变量就是暂…

    2024年5月21日
    5300
  • 旋转矩阵c语言,旋转矩阵 c语言

    请大神帮忙编写C语言程序~~ 1、实现文件写入功能,一次写入一个职工信息。实现查询功能(包含4种条件查询)。实现信息删除和修改并写入文件。根据题意,数据用结构数组存储,且职工编号唯一性,因此单独两个函数计算信息长度和编号。 2、下面这个程序举例说明了:假如当前第0个位置没有被移动过,则0应该到m位置,然后m位置应该到(m + m) % n 的位置,然后一直循…

    2024年5月21日
    3700
  • c语言中嵌入汇编,c语言嵌入汇编ldr

    C语言中插入汇编 1、Turbo C ,也就是所说的TC。使用预处理程序的伪指令#asm和#endasm,#asm用来开始一个汇编程序块,而#endasm指令用于该块的结束。 2、) 汇编语句部分:可以包含多条汇编语句,每条语句之间用“ ”或“;”,例:注:汇编语句中的操作数可以使用占位符引用C语言变量,名称如下:%0,%1,…。 3、在Visual C++…

    2024年5月21日
    5000
  • c语言函数优先级,c语言优先级啥意思

    c语言运算优先级 1、C语言中,运算符的运算优先级共分为15级。1级最高,15级最低。在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。 2、c语言运算符优先级从高到低的顺序依次如下:优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。表达式的结合次序取决…

    2024年5月21日
    4100

发表回复

登录后才能评论



关注微信