c语言如何对文件操作(c语言 文件操作)

今天给各位分享c语言如何对文件操作的知识,其中也会对c语言 文件操作进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

1、用C语言实现文件读写操作2、用C语言实现文件读写操作(4)3、C语言怎样对文件进行操作4、C语言如何操作excel文件?

用C语言实现文件读写操作

用C语言实现文件读写操作

#include “stdio.h”

main()

{

FILE *fp;

char ch,filename[10];

scanf(“%s”,filename);

if((fp=fopen(filename,”w”)==NULL)

{

printf(“cann’t open file\n”);

exit(0);

}

ch=getchar();

while(ch!=’#’)

{

fputc(ch,fp);

putchar(ch);

ch=getchar();

}

fclose(fp);

}

拓展阅读:

基于C的文件操作

在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别介绍之。

一、流式文件操作

这种方式的文件操作有一个重要的结构FILE,FILE在stdio.h中定义如下:

typedef struct {

int level; /* fill/empty level of buffer */

unsigned flags; /* File status flags */

char fd; /* File descriptor */

unsigned char hold; /* Ungetc char if no buffer */

int bsize; /* Buffer size */

unsigned char _FAR *buffer; /* Data transfer buffer */

unsigned char _FAR *curp; /* Current active pointer */

unsigned istemp; /* Temporary file indicator */

short token; /* Used for validity checking */

} FILE; /* This is the FILE object */

FILE这个结构包含了文件操作的基本属性,对文件的操作都要通过这个结构的指针来进行,此种文件操作常用的函数见下表 函数 功能

fopen() 打开流

fclose() 关闭流

fputc() 写一个字符到流中

fgetc() 从流中读一个字符

fseek() 在流中定位到指定的字符

fputs() 写字符串到流

fgets() 从流中读一行或指定个字符

fprintf() 按格式输出到流

fscanf() 从流中按格式读取

feof() 到达文件尾时返回真值

ferror() 发生错误时返回其值

rewind() 复位文件定位器到文件开始处

remove() 删除文件

fread() 从流中读指定个数的字符

fwrite() 向流中写指定个数的字符

tmpfile() 生成一个临时文件流

tmpnam() 生成一个唯一的文件名

下面就介绍一下这些函数

1.fopen()

fopen的原型是:FILE *fopen(const char *filename,const char *mode),fopen实现三个功能

为使用而打开一个流

把一个文件和此流相连接

给此流返回一个FILR指针

参数filename指向要打开的文件名,mode表示打开状态的字符串,其取值如下表

字符串 含义

“r” 以只读方式打开文件

“w” 以只写方式打开文件

“a” 以追加方式打开文件

“r+” 以读/写方式打开文件,如无文件出错

“w+” 以读/写方式打开文件,如无文件生成新文件

一个文件可以以文本模式或二进制模式打开,这两种的区别是:在文本模式中回车被当成一个字符”\n”,而二进制模式认为它是两个字符 0x0D,0x0A;如果在文件中读到0x1B,文本模式会认为这是文件结束符,也就是二进制模型不会对文件进行处理,而文本方式会按一定的方式对数据作相应的转换。

系统默认的是以文本模式打开,可以修改全部变量_fmode的值来修改这个设置,例如_fmode=O_TEXT;就设置默认打开方式为文本模式;而_fmode=O_BINARY;则设置默认打开方式是二进制模式。

我们也可以在模式字符串中指定打开的模式,如”rb”表示以二进制模式打开只读文件,”w+t”或”wt+”表示以文本模式打开读/写文件。

此函数返回一个FILE指针,所以申明一个FILE指针后不用初始化,而是用fopen()来返回一个指针并与一个特定的文件相连,如果成败,返回NULL。

例:

FILE *fp;

if(fp=fopen(“123.456″,”wb”))

puts(“打开文件成功”);

else

puts(“打开文件成败”);

2.fclose()

fclose()的功能就是关闭用fopen()打开的文件,其原型是:int fclose(FILE *fp);如果成功,返回0,失败返回EOF。

在程序结束时一定要记得关闭打开的文件,不然可能会造成数据丢失的情况,我以前就经常犯这样的毛病。

例:fclose(fp);

3.fputc()

向流写一个字符,原型是int fputc(int c, FILE *stream); 成功返回这个字符,失败返回EOF。

例:fputc(”X”,fp);

4.fgetc()

从流中读一个字符,原型是int fputc(FILE *stream); 成功返回这个字符,失败返回EOF。

例:char ch1=fgetc(fp);

5. fseek()

此函数一般用于二进制模式打开的文件中,功能是定位到流中指定的位置,原型是int fseek(FILE *stream, long offset, int whence);如果成功返回0,参数offset是移动的字符数,whence是移动的基准,取值是

符号常量 值 基准位置

SEEK_SET 0 文件开头

SEEK_CUR 1 当前读写的位置

SEEK_END 2 文件尾部

例:fseek(fp,1234L,SEEK_CUR);//把读写位置从当前位置向后移动1234字节(L后缀表示长整数)

fseek(fp,0L,2);//把读写位置移动到文件尾

6.fputs()

写一个字符串到流中,原型int fputs(const char *s, FILE *stream);

例:fputs(“I Love You”,fp);

7.fgets()

从流中读一行或指定个字符,原型是char *fgets(char *s, int n, FILE *stream); 从流中读取n-1个字符,除非读完一行,参数s是来接收字符串,如果成功则返回s的指针,否则返回NULL。

例:如果一个文件的当前位置的文本如下

Love ,I Have

But ……..

如果用

fgets(str1,4,file1);

则执行后str1=”Lov”,读取了4-1=3个字符,而如果用

fgets(str1,23,file1);

则执行str=”Love ,I Have”,读取了一行(不包括行尾的”\n”)。

8.fprintf()

按格式输入到流,其原型是int fprintf(FILE *stream, const char *format[, argument, …]);其用法和printf()相同,不过不是写到控制台,而是写到流罢了

例:fprintf(fp,”%2d%s”,4,”Hahaha”);

9.fscanf()

从流中按格式读取,其原型是int fscanf(FILE *stream, const char *format[, address, …]);其用法和scanf()相同,不过不是从控制台读取,而是从流读取罢了。

例:fscanf(fp,”%d%d” ,x,y);

10.feof()

检测是否已到文件尾,是返回真,否则返回0,其原型是int feof(FILE *stream);

例:if(feof(fp))printf(“已到文件尾”);

11.ferror()

原型是int ferror(FILE *stream);返回流最近的错误代码,可用clearerr()来清除它,clearerr()的原型是void clearerr(FILE *stream);

例:printf(“%d”,ferror(fp));

12.rewind()

把当前的读写位置回到文件开始,原型是void rewind(FILE *stream);其实本函数相当于fseek(fp,0L,SEEK_SET);

例:rewind(fp);

12.remove()

删除文件,原型是int remove(const char *filename); 参数就是要删除的文件名,成功返回0。

例:remove(“c:\\io.sys”);

13.fread()

从流中读指定个数的字符,原型是size_t fread(void *ptr, size_t size, size_t n, FILE *stream);参数ptr是保存读取的数据,void*的指针可用任何类型的指针来替换,如char*、int *等等来替换;size是每块的字节数;n是读取的块数,如果成功,返回实际读取的块数(不是字节数),本函数一般用于二进制模式打开的文件中。

例:

char x[4230];

FILE *file1=fopen(“c:\\msdos.sys”,”r”);

fread(x,200,12 ,file1);//共读取200*12=2400个字节

14.fwrite()

与fread对应,向流中写指定的数据,原型是size_t fwrite(const void *ptr, size_t size, size_t n, FILE *stream);参数ptr是要写入的数据指针,void*的指针可用任何类型的指针来替换,如char*、int *等等来替换;size是每块的字节数;n是要写的块数,如果成功,返回实际写入的块数(不是字节数),本函数一般用于二进制模式打开的文件中。

例:

char x[]=”I Love You”;

fwire(x, 6,12,fp);//写入6*12=72字节

将把”I Love”写到流fp中12次,共72字节

15.tmpfile()

其原型是FILE *tmpfile(void); 生成一个临时文件,以”w+b”的模式打开,并返回这个临时流的指针,如果失败返回NULL。在程序结束时,这个文件会被自动删除。

例:FILE *fp=tmpfile();

16.tmpnam();

其原型为char *tmpnam(char *s); 生成一个唯一的文件名,其实tmpfile()就调用了此函数,参数s用来保存得到的’文件名,并返回这个指针,如果失败,返回NULL。

例:tmpnam(str1);

二、直接I/O文件操作

这是C提供的另一种文件操作,它是通过直接存/取文件来完成对文件的处理,而上篇所说流式文件操作是通过缓冲区来进行;流式文件操作是围绕一个 FILE指针来进行,而此类文件操作是围绕一个文件的“句柄”来进行,什么是句柄呢?它是一个整数,是系统用来标识一个文件(在WINDOWS中,句柄的概念扩展到所有设备资源的标识)的唯一的记号。此类文件操作常用的函数如下表,这些函数及其所用的一些符号在io.h和fcntl.h中定义,在使用时要加入相应的头文件。

函数 说明

open() 打开一个文件并返回它的句柄

close() 关闭一个句柄

lseek() 定位到文件的指定位置

read() 块读文件

write() 块写文件

eof() 测试文件是否结束

filelength() 取得文件长度

rename() 重命名文件

chsize() 改变文件长度

下面就对这些函数一一说明:

1.open()

打开一个文件并返回它的句柄,如果失败,将返回一个小于0的值,原型是int open(const char *path, int access [, unsigned mode]); 参数path是要打开的文件名,access是打开的模式,mode是可选项。表示文件的属性,主要用于UNIX系统中,在DOS/WINDOWS这个参数没有意义。其中文件的打开模式如下表。

符号 含义 符号 含义 符号 含义

O_RDONLY 只读方式 O_WRONLY 只写方式 O_RDWR 读/写方式

O_NDELAY 用于UNIX系统 O_APPEND 追加方式 O_CREAT 如果文件不存在就创建

O_TRUNC 把文件长度截为0 O_EXCL 和O_CREAT连用,如果文件存在返回错误 O_BINARY 二进制方式

O_TEXT 文本方式

对于多个要求,可以用”|”运算符来连接,如O_APPEND|O_TEXT表示以文本模式和追加方式打开文件。

例:int handle=open(“c:\\msdos.sys”,O_BINARY|O_CREAT|O_WRITE)

2.close()

关闭一个句柄,原型是int close(int handle);如果成功返回0

例:close(handle)

3.lseek()

定位到指定的位置,原型是:long lseek(int handle, long offset, int fromwhere);参数offset是移动的量,fromwhere是移动的基准位置,取值和前面讲的fseek()一样,SEEK_SET:文件首部;SEEK_CUR:文件当前位置;SEEK_END:文件尾。此函数返回执行后文件新的存取位置。

例:

lseek(handle,-1234L,SEEK_CUR);//把存取位置从当前位置向前移动1234个字节。

x=lseek(hnd1,0L,SEEK_END);//把存取位置移动到文件尾,x=文件尾的位置即文件长度

4.read()

从文件读取一块,原型是int read(int handle, void *buf, unsigned len);参数buf保存读出的数据,len是读取的字节。函数返回实际读出的字节。

例:char x[200];read(hnd1,x,200);

5.write()

写一块数据到文件中,原型是int write(int handle, void *buf, unsigned len);参数的含义同read(),返回实际写入的字节。

例:char x[]=”I Love You”;write(handle,x,strlen(x));

7.eof()

类似feof(),测试文件是否结束,是返回1,否则返回0;原型是:int eof(int handle);

例:while(!eof(handle1)){……};

8.filelength()

返回文件长度,原型是long filelength(int handle);相当于lseek(handle,0L,SEEK_END)

例:long x=filelength(handle);

9.rename()

重命名文件,原型是int rename(const char *oldname, const char *newname); 参数oldname是旧文件名,newname是新文件名。成功返回0

例:rename(“c:\\config.sys”,”c:\\config.w40″);

10.chsize();

改变文件长度,原型是int chsize(int handle, long size);参数size表示文件新的长度,成功返回0,否则返回-1,如果指定的长度小于文件长度,则文件被截短;如果指定的长度大于文件长度,则在文件后面补”\0”。

例:chsize(handle,0x12345);

;

用C语言实现文件读写操作(4)

用C语言实现文件读写操作

二、直接I/O文件操作

这是C提供的另一种文件操作,它是通过直接存/取文件来完成对文件的处理,而上篇所说流式文件操作是通过缓冲区来进行;流式文件操作是围绕一个 FILE指针来进行,而此类文件操作是围绕一个文件的“句柄”来进行,什么是句柄呢?它是一个整数,是系统用来标识一个文件(在WINDOWS中,句柄的概念扩展到所有设备资源的标识)的唯一的记号。此类文件操作常用的函数如下表,这些函数及其所用的一些符号在io.h和fcntl.h中定义,在使用时要加入相应的头文件。

函数 说明

open() 打开一个文件并返回它的句柄

close() 关闭一个句柄

lseek() 定位到文件的指定位置

read() 块读文件

write() 块写文件

eof() 测试文件是否结束

filelength() 取得文件长度

rename() 重命名文件

chsize() 改变文件长度

下面就对这些函数一一说明:

1.open()

打开一个文件并返回它的句柄,如果失败,将返回一个小于0的值,原型是int open(const char *path, int access [, unsigned mode]); 参数path是要打开的文件名,access是打开的模式,mode是可选项。表示文件的属性,主要用于UNIX系统中,在DOS/WINDOWS这个参数没有意义。其中文件的打开模式如下表。

符号 含义 符号 含义 符号 含义

O_RDONLY 只读方式 O_WRONLY 只写方式 O_RDWR 读/写方式

O_NDELAY 用于UNIX系统 O_APPEND 追加方式 O_CREAT 如果文件不存在就创建

O_TRUNC 把文件长度截为0 O_EXCL 和O_CREAT连用,如果文件存在返回错误 O_BINARY 二进制方式

O_TEXT 文本方式

对于多个要求,可以用”|”运算符来连接,如O_APPEND|O_TEXT表示以文本模式和追加方式打开文件。

例:int handle=open(“c:\\msdos.sys”,O_BINARY|O_CREAT|O_WRITE)

2.close()

关闭一个句柄,原型是int close(int handle);如果成功返回0

例:close(handle)

3.lseek()

定位到指定的位置,原型是:long lseek(int handle, long offset, int fromwhere);参数offset是移动的量,fromwhere是移动的基准位置,取值和前面讲的fseek()一样,SEEK_SET:文件首部;SEEK_CUR:文件当前位置;SEEK_END:文件尾。此函数返回执行后文件新的存取位置。

例:

lseek(handle,-1234L,SEEK_CUR);//把存取位置从当前位置向前移动1234个字节。

x=lseek(hnd1,0L,SEEK_END);//把存取位置移动到文件尾,x=文件尾的位置即文件长度

4.read()

从文件读取一块,原型是int read(int handle, void *buf, unsigned len);参数buf保存读出的数据,len是读取的字节。函数返回实际读出的字节。

例:char x[200];read(hnd1,x,200);

5.write()

写一块数据到文件中,原型是int write(int handle, void *buf, unsigned len);参数的含义同read(),返回实际写入的字节。

例:char x[]=”I Love You”;write(handle,x,strlen(x));

7.eof()

类似feof(),测试文件是否结束,是返回1,否则返回0;原型是:int eof(int handle);

例:while(!eof(handle1)){……};

8.filelength()

返回文件长度,原型是long filelength(int handle);相当于lseek(handle,0L,SEEK_END)

例:long x=filelength(handle);

9.rename()

重命名文件,原型是int rename(const char *oldname, const char *newname); 参数oldname是旧文件名,newname是新文件名。成功返回0

例:rename(“c:\\config.sys”,”c:\\config.w40″);

10.chsize();

改变文件长度,原型是int chsize(int handle, long size);参数size表示文件新的长度,成功返回0,否则返回-1,如果指定的长度小于文件长度,则文件被截短;如果指定的长度大于文件长度,则在文件后面补”\0”。

例:chsize(handle,0x12345);

;

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

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

工具/材料

Sunlime Text

01

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

02

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

03

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

04

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

c语言如何对文件操作(c语言 文件操作)

C语言如何操作excel文件?

如果数据简单的话,可以使用CSV(逗号分隔值)格式的文件。CSV格式的文件可以用Office Excel 打开。比如有要保存的一张表格是这样的:

—————-表格开始——————-

编号 姓名 性别

1 A 男

2 B 女

3 C 男

—————表格结束——————–

那么在保存CSV文件里面数据格式是这样的:

—————-内容开始—————-

编号,姓名,性别

1, A, 男

2, B, 女

3, C, 男

—————-内容结束—————-

用Excel打开是这样的:

下面是示例程序:

#include stdio.h

struct Student

{

int id;

char name[10];

char gender[3];

};

int main(int argc, char *argv[])

{

// 在程序所在目录下面,可以看见一个名为 student.csv 的文件

FILE * file=fopen("student.csv","w");

struct Student studens[]=

{

{1,"A","男"},

{2,"B","女"},

{3,"C","男"},

};

int studensAmount=sizeof(studens)/sizeof(struct Student);

int i;

if(file)

{

fprintf(file,"%s%,%s,%s\n","编号","姓名","性别");

for(i=0;istudensAmount;i++)

{

fprintf(file,"%d%,%s,%s\n",studens[i].id,studens[i].name,studens[i].gender);

}

}

fclose(file);

return 0;}

c语言如何对文件操作的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言 文件操作、c语言如何对文件操作的信息别忘了在本站进行查找喔。

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

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

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年4月2日 23:27:10
下一篇 2024年4月2日 23:34:20

相关推荐

  • c语言改写模式,c语言实现修改功能

    c语言程序修改? 1、这个程序有4个错误,我都加粗了,第一个是m没有赋初值,第二个是while表达式中的ch=getchar()需要括号括起来,第三个是m=m*10+ch-0中的0也需要用单引号括起来,第四个是第2个while中为m!=0。 2、define容易造成误会,因为不符合一般的编程习惯,false 0, true 1;scanf放在你的那个地方是达…

    2024年5月23日
    3900
  • c语言控制代码的换码序列,c语言交换代码

    求C语言编程大神解答一下下面这个编程代码? k==5,用5去除125余0,所以r=125%5中r为0。由于!0为1,所以执行while循环体:先打印出5(k的值),再n=n/k==125/5=25;由于251则再打印出*号。这一循环结果输出是5*。 下面是我的代码,三个函数分别对应三个问题。 在实现基本要求的前提下,拓展了可以从键盘输入的功能,以下为各题代码…

    2024年5月23日
    5600
  • linux给文件写权限,linux怎么给文件权限

    linux宝塔写入权限不足 1、可以使用chmod命令修改权限。语法:chmod [-cfvR] [–help] [–version] mode file…说明 : Linux/Unix 的档案调用权限分为三级 : 档案拥有者、群组、其他。利用 chmod 可以藉以控制档案如何被他人所调用。 2、通过更改文件权限可以使用c…

    2024年5月23日
    5100
  • c语言扫描io脚状态,c语言端口扫描

    求51单片机的上升沿和下降沿C语言检测程序列子,端口就是普通IO口。 上升沿触发是当信号有上升沿时的开关动作,当电位由低变高而触发输出变化的就叫上升沿触发。也就是当测到的信号电位是从低到高也就是上升时就触发,叫做上升沿触发。 单片机怎么计算1s内下降沿的个数的C语言程序或者计算两个下降沿的时间(检测脉冲频率)计算1s内下降沿的个数方法是,一个定时器设置定时1…

    2024年5月23日
    4400
  • c语言mallloc使用的简单介绍

    C语言中使用malloc必须加#includemallo.h? 1、在C语言中使用malloc函数进行动态内存分配。malloc的全称是memory allocation,中文叫动态内存分配。原型:extern void malloc(unsigned int num_bytes);功能:分配长度为num_bytes字节的内存块。 2、你可以看一下C语言那本…

    2024年5月23日
    4400
  • c语言三位小数,C语言三位小数

    怎样用C++语言输出精确到小数点后三位的数? 1、用C++语言输出精确到小数点后三位的数,可以参考下面给出的代码:coutsetiosflags(ios:fixed)setprecision(3)。其中 setiosflags中set是设置的意思。ios是iostream的缩写,即输入输出流。flags是标志的意思。 2、要精确到小数点后若干位,则数据类型为…

    2024年5月23日
    7300
  • c语言21点游戏,二十一点游戏代码c语言

    如何使用C语言编写简单小游戏? 1、数学知识:长方形的面积S=a*b 长方形周长L=2*(a+b)其中a b分别为长方形的宽和高。算法分析:长方形面积及周长均依赖于宽和高,所以先要输入宽高值,然后根据公式计算,输出结果即可。 2、/*也不知道你是什么级别的,我是一个新手,刚接触编程语言,以下是我自己变得一个小程序,在所有c语言的编译器(vc++0、turbo…

    2024年5月23日
    6400
  • c语言当中的null,C语言当中的符号

    C/C++中,NULL和null的区别是什么? nul 和 null要看编译器,不同的编译器有所区别。 所以C或者C++中都使用一个特殊定义NULL表示无效值,其本质就是未定义具体数据类型的0值。 null是是什么都没有的意思。在java中表示空对象。 本意是“空的;元素只有零的”意思。计算机中通常表示空值,无结果,或是空集合。\x0d\x0a在ASCII码…

    2024年5月23日
    4500
  • 包含c语言对txt文件命名的词条

    如何在C语言编程里面修改源文件名字 如果你是在WINDOWS的话,简单了,随便用个编辑器,比如记事本,然后写c源程序,保存到你想要保存的位置。如果你在DOS下,可以用edit,写好以后,按alt键,选择文件菜单,然后保存。 用open打开文件,注意操作模式使用“修改”或者“添加” 用write或者fprintf向文件中写入你的内容。 用close关闭文件。 …

    2024年5月23日
    4900
  • 学c语言编程,学c语言编程用什么软件

    编程开发必须要学C语言吗? 1、要学习。编程开发的学习内容主要包括c语言、python和c+语言。C语言作为一种简单灵活的高级编程语言,它是一个面向过程的语言,一般是作为计算机专业的基础入门语言课程。 2、C语言。对于刚接触编程的人来说,先学习C语言是非常重要的。C语言可以说是是计算机编程语言的鼻祖,其他的编程语言几乎全是由C语言变化衍生出来的。 3、不需要…

    2024年5月23日
    3500

发表回复

登录后才能评论



关注微信