当前位置:   article > 正文

文件(C语言)_文件c语言

文件c语言

1.文件(file) 指存储在外部介质上数据的集合,比如我们经常使用的txt、bmp、 jpg、 exe、 rmvb 等等。这些文件各有名的用途,我们通常将它们存放在磁盘或者可移动盘等介质中。

文件无非就是一段数据的集合,这些数据可以是有规则的集合,也可以是无序的集合。操作系统也就是以文件为单位对数据进行管理的。也就是说,要访问外部介质上的数据,必须先按照文件名进行查找,然后从该文件中读取数据。要想写数据到外部介质,必须得建立-个文件,然后再写入。

2.文件一般包括三要素:文件路径、文件名、后缀。

由于在C语言’ \ ‘一般是转义字符的起始标志。故在路径中需要用两个’ \ \ ‘表示路径中目录层次的间隔,也可以使用’/'作为路径中的分隔符。

例如: "D: \ \yuwen\test.c"或者"D:/ulun/test.c*.表示文件test.c 保存在D盘yuwen目录下。

文件路径:可以显式指出其绝对路径,如上面的" D: \ \ " 或者" D:/" 等。

如果没有显式指出其路径,默认为当前路径。也就相对路径。

3.数据的输入和输出几乎伴随着每个C语言程序,所谓输入就是从“源端”获取数据,所谓输出可以理解为向“终端”写入数据。这里的源端可以是键盘、鼠标、硬盘、光盘、扫描仪等输入设备,终端可以是显示器、硬盘、打印机等输出设备。在C语言中,把这些输入和输出设备也看作"文件" 。

4.C语言文件系统中的类型

FLE :对象类型,足以保有控制I/O流所需的全部信息

5.流的概念及分类

I/O设备的多样性及复杂性,给程序设计者访问这些设备带来了很大的难度和不便。为此,ANSIC的I/O系统即标准I/O系统,把任意输入的源端或任意输出的终端,都抽象转换成了概念上的“标准I/O设备”或称"标准逻辑设备”。程序绕过具体设备,直接与该“标准逻辑设备”进行交互,这样就为程序设计者提供了一个不依赖于任何具体I/O设备的统一操作接口,通常把抽象出来的"标准逻辑设备”或"标准文件”称作“流"。

把任意I/O 设备,转换成逻辑意义上的标准I/O 设备或标准文件的过程,并不需要程序设计者感知和处理,是由标准I/O系统自动转换完成的。故从这个意义上,可以认为任意输入的源端和任意输出的终端均对应一个“流”。

a)流按方向分为: 输入流和输出流。从文件获取数据的流称为输入流,向文件输出数据称为输出流。

b)流按数据形式分为:文本流和二进制流。文本流是ASCII 码字符序列,而二进制流是字节序列。

文本文件存储模式

字符 ‘1’ ‘2’ ‘3’
ASCII(十进制) 49 50 51
ASCII(二进制) 0011 0001 0011 0010 0011 0011

二进制文件存储模式

十六进制 00 00 00 7b
二进制 0000 0000 0000 0000 0000 0000 0111 1011

c)流是一种抽象的概念,负责在数据的产生者和数据的使用者之间建立联系,并管理数据的流动。

d)文本文件和二进制文件的区别

根据文件中数据的组织形式的不同,可以把文件分为:文本文件和二进制文件。

文本文件:把要存储的数据当成一 系列字符组成,把每个字符的ASCI码值存入文件中。每个ASCII 码值占-个字节,每个字节表示一个字符。 故文本文件也称作字符文件或ASCII文件,是字符序列文件。

二进制文件:把数据对应的二=进制形式存储到文件中,是字节序列文件。

6.C语言与文件读写,文件库函数stdio.h

C语言操作文件分为三步,1) 打开文件, 2)读写文件, 3)关闭文件。

打开文件函数原型: FILE * fopen ( const char * filename, const char * mode ):

函数参数:

filename:文件名, 包括路径,如果不显式含有路径,则表示当前路径。例如,“D:\texf.txt” 表示D盘根目录下的文件text.txt 文件。“tulun.txt” 表示当前目录下的文件tulun.txt,

mode:文件打开模式, 指出对该文件可进行的操作。常见的打开模式如"r” 表示只读, “W” 表示只写 ,"rw”表示读写, "a” 表示追加写入。

模式 含义 说明
“r” 只读 文件必须存在,否则打开失败
“w” 只写 若文件存在,则清除原文件内容后写入;否则,创建新文件后写入。
“a” 末尾只写 若文件不存在,则位置指针移到文件末尾,在文件尾部追加写入数据,故该方式不删除原文件数据;若文件不存在,创建新文件后写入。
“r+” 读写 文件必须存在,否则打开失败。在只读"r"的基础上加"+"表示增加可写的功能。
“w+” 读写 创建新文件,先向该文件中写入数据,然后可从该文件读取数据。
“a+” 读写 在"a"模式的基础上,增加可读功能。
“rb” 二进制文件只读 功能同模式"r",二进制模式。
“wb” 二进制文件只写 功能同模式"w",二进制模式。
“ab” 二进制文件末尾只写 功能同模式"a",二进制模式。
“rb+” 二进制文件读写 功能同模式"r+",二进制模式。
“wb+” 二进制文件读写 功能同模式"w+",二进制模式。
“ab+” 二进制文件读写 功能同模式"a+",二进制模式。

返回值:

打开成功,返回该文件对应的FILE 类型的指针;打开失败,返回NULL. 故需定义FILE 类型的指针变量,保存该函数的返回值。可根据该函数的返回值判断文件打开是否成功。

7.关闭函数fclose的原型: int fclose( FILE*stream );

函数参数

strem:指向要关闭流对象的指针。

返回值:

如果流被成功关闭,返回0值。失败是,返回EOF(-1)。

即使调用失败,作为参数传递的流将不再与文件或其缓冲区关联。

int main()
{
   
    FILE* fp=NULL;
    fp=fopen("akshi.txt","w");//malloc
    if(NULL==fp)
    {
   
        printf("file open error\n");
        return 1;
    }
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
int main()
{
   
	int ar[] = {
    12,23,34,45,56,67,78,89,90,100 };
	int n = sizeof(ar) / sizeof(ar[0]);
	FILE* fp = NULL;
	fp=fopen("akshi.txt","w");
	if (NULL == fp)
	{
   
		printf("open file error\n");
		return 1;
	}
	//文件的写
	for (int i = 0; i < n; ++i)
	{
   
		//printf("%d ", ar[i]);//stdout
        //fprintf(stdout,"%d",ar[i]);
        fprintf(fp,"%d",ar[i]);
	}
    fclose(fp);
    fp=NULL;
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

数据写入缓冲区,关闭之后,将数据写入磁盘

8.如果输入错误,却查找不到那么fopen_s()可以解决足够问题

int main()
{
   
	int ar[] = {
    12,23,34,45,56,67,78,89,90,100 };
	int n = sizeof(ar) / sizeof(ar[0]);
	FILE* pfa = NULL;
	//pfa = fopen("akashi.txt", "a"); // 
	errno_t tag = fopen_s(&pfa, "Liu.txt", "a");  // 
	if (NULL == pfa)
	{
   
		printf("open file error: %d \n", tag);
		exit(EXIT_FAILURE);
	}

	for (int i = 0; i < n; ++i)
	{
   
		fprintf
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/112350
推荐阅读
相关标签
  

闽ICP备14008679号