




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2020/8/1,1,考试:6月14日下午13:30-15:30 地点:J3-310,J3-312,2,C 语言程序设计,第10章 对文件的输入输出,北京航空航天大学 交通科学与工程学院 徐国艳,2020/8/1,3,第10章 文件,10.1 文件的概念 10.2 文本文件的读写 10.3 二进制文件的读写,2020/8/1,4,文件:存储在外部存储介质上相关数据的集合。 例如:程序文件中保存着程序,数据文件中保存着数据。 程序文件:文件的内容是程序代码; *.CPP C语言的源程序文本文件 *.OBJ 目标文件二进制文件 *.EXE 可执行文件二进制文件 数据文件:是供程序运行时读写的数据,
2、如在程序运行过程中输出到磁盘(或其他外部设备)的数据,或在程序运行过程中供读入的数据。如一批学生的成绩数据,或货物交易的数据等。,10.1 文件的概述,10.1.1 文件和文件指针,1. 什么是文件,在以前各章中所处理的数据的输入和输出,从终端的键盘输入数据,运行结果输出到终端显示器上; 常常需要将一些数据输出到磁盘上保存起来,以后使用,这就要用到磁盘文件。,操作系统把各种设备都统一作为文件处理 从操作系统的角度看,每一个与主机相联的输入输出设备都看作是文件。例如, 终端键盘是输入文件 显示屏和打印机是输出文件,10.1 文件的概述,10.1.1 文件和文件指针,1. 什么是文件,输入输出是数
3、据传送的过程,数据如流水一样从一处流向另一处,因此常将输入输出形象地称为流(stream),即数据流。流表示了信息从源到目的端的流动。 语言把文件看作是一个字符(或字节)的序列。一个输入输出流就是一个字符流或字节(内容为二进制数据)流。,10.1 文件的概述,10.1.1 文件和文件指针,1. 什么是文件,文件要有一个唯一的文件标识,以便用户识别和引用。 文件标识包括三部分: (1)文件路径 (2)文件名主干 (3)文件后缀,10.1 文件的概述,10.1.1 文件和文件指针,2. 文件名,文件路径表示文件在外部存储设备中的位置。如: D: CCtempfile1.dat 表示file1.da
4、t文件存放在D盘中的CC目录下的temp子目录下面,文件路径,文件名主干,文件后缀,10.1 文件的概述,10.1.1 文件和文件指针,2. 文件名,文件路径表示文件在外部存储设备中的位置。如: D: CCtempfile1.dat 表示file1.dat文件存放在D盘中的CC目录下的temp子目录下面,文件名,10.1 文件的概述,10.1.1 文件和文件指针,2. 文件名,文件路径表示文件在外部存储设备中的位置。如: D: CCtempfile1.dat 表示file1.dat文件存放在D盘中的CC目录下的temp子目录下面,命名规则遵循标识符的命名规则,10.1 文件的概述,10.1.1
5、 文件和文件指针,2. 文件名,文件路径表示文件在外部存储设备中的位置。如: D: CCtempfile1.dat 表示file1.dat文件存放在D盘中的CC目录下的temp子目录下面,一般不超过3个字母(doc、txt、dat、c、cpp、obj、exe、ppt、bmp等),10.1 文件的概述,10.1.1 文件和文件指针,2. 文件名,2020/8/1,12,数据文件存储数据的形式 ASCII文件(或称文本文件) ASCII码文件中每个字节存放一个ASCII代码,代表一个字符,此种存储形式便于输出显示,在DOS操作系统下可以直接阅读。 二进制文件 二进制文件中的数据是按照在内存中的二进
6、制存储格式存放的,此种存储形式节省存储单元。二进制文件在DOS操作系统下不能直接阅读。,10.1 文件的概述,10.1.1 文件和文件指针,3. 数据文件的种类,2020/8/1,13,10.1 文件的概述,10.1.1 文件和文件指针,字符一律以ASCII形式存储 数值型数据既可以用ASCII形式存储,也可以用二进制形式存储。 如有整数10000,如果用ASCII码形式输出到磁盘,则在磁盘中占个字节(每一个字符占一个字节),而用二进制形式输出,则在磁盘上只占4个字节(用VC+ 时),3. 数据文件的种类,2020/8/1,14,例如将整数10000分别存储在这两种数据文件中。,10.1 文件
7、的概述,10.1.1 文件和文件指针,(1),(0),(0),(0),(0),ASCII形式,二进制形式,(10000),3. 数据文件的种类,4. 文件缓冲区,ANSI C标准采用“缓冲文件系统”处理数据文件.,10.1 文件的概述,10.1.1 文件和文件指针,程序数据区,输出文件缓冲区,输入文件缓冲区,缓冲文件系统:指系统自动地在内存区为程序中每一个正在使用的文件开辟一个文件缓冲区。,程序数据区,输出文件缓冲区,输入文件缓冲区,磁盘,从内存向磁盘输出数据,装满缓冲区,3. 文件缓冲区,10.1 文件的概述,10.1.1 文件和文件指针,程序数据区,输出文件缓冲区,输入文件缓冲区,磁盘,从
8、磁盘向计算机读入数据,充满缓冲区,4. 文件缓冲区,10.1 文件的概述,10.1.1 文件和文件指针,缓冲文件系统中,关键的概念是“文件类型指针”,简称“文件指针” 每个被使用的文件都在内存中开辟一个相应的文件信息区,用来存放文件的有关信息(如文件的名字、文件状态及文件当前位置等) 这些信息是保存在一个结构体变量中的。该结构体类型是由系统声明的,取名为FILE,5.文件类型指针,10.1 文件的概述,10.1.1 文件和文件指针,声明FILE结构体类型的信息包含在头文件“stdio.h”中 一般设置一个指向FILE类型变量的指针变量,然后通过它来引用这些FILE类型变量,5.文件类型指针,1
9、0.1 文件的概述,10.1.1 文件和文件指针,FILE*fp1,*fp2,*fp3;,文件f1的 文件信息区,fp1,文件f2的 文件信息区,fp2,文件f3的 文件信息区,fp3,5.文件类型指针,10.1 文件的概述,10.1.1 文件和文件指针,2020/8/1,21,13.1 文件的概述,13.1.2 文件的打开与关闭,操作文件的一般步骤 打开文件 读写文件 关闭文件,打开文件:建立用户程序与文件的联系,为文件分 配一个文件缓冲区。,读写文件:是指对文件的读、写、追加和定位操作。,关闭文件:切断文件与程序的联系,释放文件缓冲 区。,C语言的输入输出函数库中提供了大 量的函数,用于完
10、成对数据文件的建立、 数据的读写、数据的追加等操作。 在程序中调用这些函数时,必须先用include命令包含stdio.h文件。,2020/8/1,22,常用的调用形式: FILE *fp; fp = fopen(文件名, 文件使用方式); 文件名:需要打开的文件名称(字符串)。 文件使用方式:是具有特定含义的符号。,10.1 文件的概述,10.1.2 文件的打开与关闭,1. 文件打开函数fopen( ),函数功能: 按指定的文件使用方式打开指定的文件。 若文件打开成功,为该文件分配一个文件缓冲区和一个 FILE类型变量,返回一个FILE类型指针; 若文件打开失败,返回NULL。,2020/8
11、/1,23,文本文件的三种基本使用方式 ”r”:只读方式 为读(输入)文本文件打开文件。若文件不存在,返回NULL。 ”w”:只写方式 为写(输出)文本文件打开文件。若文件不存在,则建立一个新文件;若文件已存在,则清空文件。 ”a”:追加方式 为写(输出)文本文件打开文件。若文件已存在,则保持原来文件的内容,将新的数据增加到原来数据的后面;若文件不存在,则返回NULL。,10.1 文件的概述,10.1.2 文件的打开与关闭,2020/8/1,24,二进制文件的三种基本使用方式 ”rb”:只读方式 为读(输入)二进制文件打开文件。若文件不存在,返回NULL。 ”wb”:只写方式 为写(输出)二进
12、制文件打开文件。若文件不存在,则建立一个新文件;若文件已存在,则清空文件。 ”ab”:追加方式 为写(输出)二进制文件打开文件。若文件已存在,则保持原来文件的内容,将新的数据增加到原来数据的后面;若文件不存在,则返回NULL。,10.1 文件的概述,10.1.2 文件的打开与关闭,2020/8/1,25,10.1 文件的概述,10.1.2 文件的打开与关闭,文件的其他打开方式 ”r+”:可以对文本文件进行读/写操作。 若文件不存在返回NULL; 若文件存在内容不被清空。 ”w+”:可以对文本文件进行读/写操作。 若文件已经存在,则先清空文件原来的内容。 ”a+”:可以对文本文件进行读/追加操作
13、。 文件内容不会清空。 ”rb+”:可以对二进制文件进行读/写操作。 ”wb+”:可以对二进制文件进行读/写操作。 ”ab+”:可以对二进制文件进行读/追加操作。,2020/8/1,26,检查文件打开操作是否成功 if(fp = fopen(filename, r) = NULL) printf (”Cannot open file.n”); exit(0); 检查以只读方式打开文件名为filename的文件是否成功。 exit函数的作用:关闭所有文件,终止正在执行的程序 。,10.1 文件的概述,10.1.2 文件的打开与关闭,2020/8/1,27,常用的调用形式: FILE *fp; f
14、close( fp ); fp:已经打开的文件指针。,10.1 文件的概述,10.1.2 文件的打开与关闭,2. 文件关闭函数fclose( ),函数功能: 关闭fp指定的文件,释放该文件的缓冲区、 FILE类型变量及文件指针。 若文件关闭成功,则返回0; 若文件关闭失败,则返回非0值。,2020/8/1,28,常用的调用形式: FILE *fp; fputc( ch,fp ); ch:需要输出的字符,可以是字符常量或字符变量; fp:文件指针变量。,10.2 文本文件的读写,10.2.1 文件的字符输入输出函数,1. 字符输出函数fputc( )(或putc( )),函数功能: 将一个字符(
15、ASCII码)写入到fp所指向的文件(该文件 必须是以写或读写方式打开的)中。 若输出操作成功,函数返回写入的字符;否则,返回EOF。,系统定义的文本文件结束标志,其值为 (-1)。, putc函数与fputc函数的功能相同。在stdio.h文件中被定义为 #define putc(c,f) fputc(c),f) 标准文件中用的putchar函数是fputc函数的特殊用法,它在stdio.h文件中被定义为 #define putchar(c) putc(c),stdout),2020/8/1,29,常用的调用形式: FILE *fp; ch = fgetc(fp); ch:可以是字符变量或整
16、型变量; fp:文件指针变量。,10.2 文本文件的读写,10.2.1 文件的字符输入输出函数,2. 字符输入函数fgetc( )(或getc( )),函数功能: 从fp所指向的文件(该文件必须是以读或读写方式打开 的)中读取一个字符。 若输入操作成功,函数返回读入的字符; 若文件结束或输入操作失败,则返回EOF。, getc函数与fgetc函数的功能相同。在stdio.h文件中被定义为 #define getc(f) fgetc(f) 标准文件中用的getchar函数是fgetc函数的特殊用法,它在stdio.h文件中被定义为 #define getchar( ) getc(stdin),2
17、020/8/1,30,【例10.1】利用fopen函数建立一个文本文件,并显示文件中的内容。 #include void main( ) FILE *fp; /* 定义一个文件指针变量fp */ int c; /* c为存放字符的变量 */ char filename40; /* filename用于存放数据文件名 */ printf(filename: ); /* 提示输入磁盘文件名 */ gets(filename); if (fp=fopen(filename,w)=NULL) printf(Cant open the %sn, filename); exit(0); ,10.2 文本文
18、件的读写,10.2.1 文件的字符输入输出函数,测试打开文件是否成功,2020/8/1,31,while (c=getchar( )!=EOF) /*键盘文件结束标志:输入Ctrl+z,显示Z后回车*/ putc(c, fp); /* 将键盘输入的字符写到文件中 */ fclose(fp); /* 建立文件结束,关闭文件 */ printf(outfile:n); fp=fopen(filename,r); /* 以读方式打开文本文件 */ while (c=getc(fp)!=EOF) /* 未读到文件结束标志时 */ putchar(c); /* 在显示器显示读出的字符 */ fclose
19、(fp); /* 读文件结束,关闭文件 */ ,10.2 文本文件的读写,10.2.1 文件的字符输入输出函数,2020/8/1,32,常用的调用形式: FILE *fp; feof(fp); fp:文件指针变量。,10.2 文本文件的读写,10.2.2 文件结束测试函数,函数功能: 测试fp所指向的文件是否已读到文件尾部。 若该文件没有结束,则返回0; 若文件结束,则返回非0值。,对文本文件进行读操作时,例如fgetc( )返回EOF,即可作文件结束处理。但在二进制文件中-1是合法数据,所以系统提供了一个适用对象更普遍的文件结束测试函数feof。,2020/8/1,33,例如:复制一个磁盘文
20、件。 #include void main( ) FILE *infp,*outfp; char infile40,outfile40; int ch; printf(input filename:); scanf(%s,infile); printf(output filename:); scanf(%s,outfile); if(infp=fopen(infile,r)=NULL) /* 打开源文件 */ printf(infile open error.n); exit(0); if(outfp=fopen(outfile,w)=NULL)/* 打开目标文件 */ printf(outf
21、ile open error.n); exit(0); ch=fgetc(infp); /* 从源文件中读一个字符 */ while(!feof(infp) /* 源文件未读完 */ fputc(ch, outfp); ch=fgetc(infp); /* 复制文件 */ fclose(infp); fclose(outfp);,10.2 文本文件的读写,10.2.2 文件结束测试函数,2020/8/1,34,常用的调用形式: FILE *fp; fputs( str, fp ); str:需要输出的字符串,可以是字符串常量或字 符串指针; fp:文件指针变量。,fputs与puts函数的功能
22、类似,它们的区别: puts函数能将字符串的结束标志 0 转换成 n 输出,因此字符串在显示器输出后,光标移至下一行;而fputs函数对字符串结束标志 0 的处理仅仅是将其舍去。,10.2 文本文件的读写,10.2.3 文件的字符串输入输出函数,1. 字符串输出函数fputs( ),函数功能: 将字符串(不包括字符串结束标志0)写到文件指针 fp所指向的文件中。 若输出操作成功,返回非0值; 若输出操作失败,则返回0。,2020/8/1,35,常用的调用形式: FILE *fp; fgets( str, n, fp ); str:字符指针,可以是字符数组名或字符指针变量; n:读取字符个数(n
23、-1)。 fp:文件指针变量。,10.2 文本文件的读写,10.2.3 文件的字符串输入输出函数,2. 字符串输入函数fgets( ),函数功能: 从fp所指向的文件中,读取n-1个字符后,加上字符串结 束标志0组成一个字符串,存入字符数组中。 若输入操作成功,返回字符数组的首地址; 若文件结束或输入操作失败,则返回NULL。, 从文件读取字符的过程中,如果读到回车符(15)舍去,如果读到换行符(12)仍按字符读出,再加上 0 作为一个字符串,同时结束文本行读取操作,函数正常返回。当读到文件结束时,直接加上0作为一个字符串,函数正常返回。 fgets与gets函数的区别:gets函数以换行符作
24、为行结束标志,并舍去换行符。fgets函数也以换行符作为行的读结束标志,但换行符同时还作为字符串的内容。因此可将含有换行符的文本文件看作是由一行一行字符组成的。,2020/8/1,36,【例10.3】应用fputs和fgets函数,建立和读取文本文件。 #include stdio.h #include string.h void main( ) FILE *fp; /* 定义一个文件指针变量fp */ char filename40,str81; printf(filename: ); /* 提示输入磁盘文件名 */ gets(filename); if (fp=fopen(filename
25、,w)=NULL) /* 在磁盘中新建并打开一个文本文件,同时测试是否成功 */ printf(Can t open the %sn,filename); exit(0); ,10.2 文本文件的读写,10.2.3 文件的字符串输入输出函数,2020/8/1,37,while (strlen(gets(str)0) /* 键盘输入空串(即仅输入回车)则输入全部结束 */ fputs(str,fp); /* 将键盘输入的字符串写到文件中 */ fputc(n,fp); /* 在文件中加入换行符作为字符串分隔符 */ fclose(fp); /* 建立文件结束,关闭文件 */ printf(out
26、file:n); fp=fopen(filename,r); /* 以读方式打开文本文件 */ while (fgets(str,81,fp)!=NULL) /* 从文件读取字符串并测试文件是否已读完 */ printf(%s,str); /* 将文件中读取的字符串分行显示 */ fclose(fp); /* 读文件结束,关闭文件 */ ,10.2 文本文件的读写,10.2.3 文件的字符串输入输出函数,2020/8/1,38,与标准文件的格式输入输出函数scanf和printf相对应,文本文件也有格式输入输出函数fscanf和fprintf。它们的功能和格式基本相同,不同之处在于scanf和
27、printf的读写对象是终端(键盘和显示器),fscanf和fprintf的读写对象是磁盘文件。,常用的调用形式: FILE *fp; fprintf( fp, 格式控制串,输出项参数表 ); fp:文件指针变量。 格式控制串和输出项参数表的规定和使用方法与printf函数相同。,10.2 文本文件的读写,10.2.4 文件的格式输入输出函数,1. 格式输出函数fprintf( ),函数功能: 将输出项按指定格式写入fp所指向的文件中。 若输出操作成功,返回写入的字节数; 若输出操作失败,则返回EOF。,2020/8/1,39,常用的调用形式: FILE *fp; fscanf( fp, 格式
28、控制串, 地址表); fp:文件指针变量。 格式控制串和地址表的规定和使用方法与scanf函数相同。,10.2 文本文件的读写,10.2.4 文件的格式输入输出函数,2. 格式输入函数fscanf( ),函数功能: 按格式控制串所描述的格式,从fp所指向的文件中读取 数据,送到指定的内存地址单元中。 若输入操作成功,返回实际读出的数据项个数,不包括 数据分隔符。若没有读数据项,则返回0。 若文件结束或调用失败,则返回EOF。,2020/8/1,40,二进制文件存储信息的形式与内存中存储信息的形式是一致的,如果需要在内存与磁盘文件之间频繁交换数据,最好采用二进制文件。 二进制文件一般是同类型数据
29、集合,数据之间无分隔符,每个数据所占字节数是一个定值,因此二进制文件除了可以顺序存取外,还可运用定位函数方便地进行随机存取。,常用的调用形式: FILE *fp; putw( w, fp ); w:要输出的整型数据,可以是常量或变量。 fp:文件指针变量。,10.3 二进制文件的读写,10.3.1 文件的字输入输出函数,1. 整数输出函数putw( ),函数功能: 把整型数w写入fp所指向的文件(以写方式打开的 二进制文件)。 若输出操作成功,返回w值; 若输出操作失败,则返回EOF。,由于EOF(-1)是一个合法的整数,因此应该用ferror函数检测函数调用是否出错。,2020/8/1,41
30、,常用的调用形式: FILE *fp; getw( fp ); fp:文件指针变量。,10.3 二进制文件的读写,10.3.1 文件的字输入输出函数,2. 整数输入函数getw( ),函数功能: 从fp所指向的文件(以读方式打开的二进制文件) 中读取一个整型数。 若输入操作成功,返回从文件中读取的整数。 若文件结束或调用失败,则返回EOF。,EOF(-1)是getw函数可能返回的合法值,所以应该用feof函数或ferror函数检测文件是否结束或调用失败。,2020/8/1,42,【例10.5】应用putw和getw函数建立二进制整型数据文件 并读取其中的数据。 #include stdio.h
31、 void main( ) FILE *fp; /* 定义一个文件指针变量fp */ char filename40; /* filename用于存放数据文件名 */ int i,n1=5,n2,x5=10,22,36,48,59,y5; printf(filename: ); gets(filename); if (fp=fopen(filename,wb)=NULL) /* 新建并打开一个二进制文件,并测试是否成功 */ printf(Can t open the %sn,filename); exit(0); ,10.3 二进制文件的读写,10.3.1 文件的字输入输出函数,2020/8
32、/1,43,putw(n1,fp); /* 向二进制文件写入一个整数 */ for (i=0; in1; i+) putw(xi,fp); /* 将x数组的5个整数写入二进制文件 */ fclose(fp); /* 建立文件结束,关闭文件 */ printf(outfile:n); fp=fopen(filename,rb); /* 以读方式打开二进制文件 */ n2=getw(fp); /* 从二进制文件读取一个整数 */ for (i=0; in2; i+) yi=getw(fp); /* 从文件读取一个整数赋给y数组元素 */ printf(%d ,yi); printf(n); fcl
33、ose(fp); /* 读文件结束,关闭文件 */ ,10.3 二进制文件的读写,10.3.1 文件的字输入输出函数,2020/8/1,44,常用的调用形式: fwrite(p, size, n, fp); p:某类型指针; size:某类型数据存储空间的字节数(数据项大小); n:此次写入文件的数据项数; fp:文件指针变量。,10.3 二进制文件的读写,10.3.2 文件的数据块输入输出函数,1. 数据块输出函数fwrite( ),函数功能: 将p指向的存储区中n个数据项写入fp所指向的文件。 若输出操作成功,返回写入的数据项数; 若输出操作失败,则返回0。,运用数据块输入输出函数可建立整
34、型、实型、结构体类型等各种类型的二进制文件。,2020/8/1,45,常用的调用形式: fread(p, size, n, fp); p:某类型指针; size:某类型数据存储空间的字节数(数据项大小); n:此次从文件中读取的数据项数; fp:文件指针变量。,10.3 二进制文件的读写,10.3.2 文件的数据块输入输出函数,2. 数据块输入函数fread( ),函数功能: 从fp所指向的文件中,读取n个数据项,存放到p所指向 的存储区域。 若输入操作成功,返回实际读出的数据项个数。 若文件结束或调用失败,则返回0。,2020/8/1,46,【例10.6】应用fwrite与fread函数建立
35、一个存放学生电话簿 的二进制数据文件并读取其中的数据。 #include stdio.h #include stdlib.h void main( ) FILE *fp; int i; char filename40; /* filename用于存放数据文件名 */ struct tel char name20, tel9; in5, out5; printf(filename: ); gets(filename); if (fp=fopen(filename,wb)=NULL) printf(Cant open the %sn,filename); exit (0); ,10.3 二进制文件的读写,10.3.2 文件的数据块输入输出函数,新建并打开一个二进制文件,并测试是否成功,2020/8/1,47,for(i=0; i5; i+) printf(name: ); gets(); printf(tel: ); gets(ini.tel); fwrite(in, sizeof(struct tel), 5, fp); /* 文件中写入5个学生的电话 */ fclose(fp); /* 建立文件结束,关闭文
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 文化遗产数字化展示策略报告-2025年文化遗产数字化展示与传播政策环境分析报告
- 2024保密观知识竞赛试题含答案1
- 2025年食品行业食品安全追溯体系与农产品品牌建设研究报告
- 心理健康服务在社区2025年推广中的心理健康服务与社区心理健康服务评价研究报告
- 2025年金融风险管理数字化转型的风险管理能力提升路径与策略报告
- 2023美国儿科学会新生儿高胆红素血症临床指南修订:胎龄35周及以上新生儿高胆红素血症的管理
- 中职高考英语一轮复习练习(虚拟语气)含答案
- 2025版房地产项目售后服务承包合同标准范本
- 2025版二手搅拌设备二手交易新能源应用合同
- 二零二五年度智能家居产品区域代理销售合同模板
- 2025年食品安全监管专家技能考核试题答案
- 2025浙江台州市椒江区区属国有企业招聘42人笔试历年参考题库附带答案详解
- 2025年医院感染预防与控制试题(含答案)
- 2025新兴宠物用品市场洞察报告-大数跨境-202507
- 养老院洗浴护理课件
- 定额〔2025〕1号文-关于发布2018版电力建设工程概预算定额2024年度价格水平调整的通知
- 九年级英语分层作业设计优秀案例
- 污水厂运营安全保护措施
- 妇产科学课件:子宫颈肿瘤
- 钻孔灌注桩施工危险源辨识及分析
- GB∕T 25279-2022 中空纤维帘式膜组件
评论
0/150
提交评论