赞
踩
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;
}
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; }
数据写入缓冲区,关闭之后,将数据写入磁盘
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。