第9章 文件.doc_第1页
第9章 文件.doc_第2页
第9章 文件.doc_第3页
第9章 文件.doc_第4页
第9章 文件.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第9章 文件9.1 知识要点回顾9.1.1 文件概述1. 文件的概念文件是存储在外部介质上的数据集合。文件可看成是字符(字节)的序列,即文件是由一个一个的字符(字节)数据顺序组成。C语言将文件看成是字符流或二进制流,有时也把文件称为流(stream)。操作系统以文件为单位对数据进行管理,每个文件都有一个名称,文件名是文件的标识,操作系统通过文件名访问文件。2. 文件的分类(1)磁盘文件和设备文件磁盘文件:文件一般保存在磁介质(如软盘、硬盘)上,所以称为磁盘文件。设备文件:操作系统还经常将与主机相连接的I/O设备(如键盘-输入文件、显示器、打印机-输出文件)也看作为文件,即设备文件。很多磁盘文件的概念、操作,对设备文件也同样有意义,有效。 (2)ASCII文件和二进制文件根据数据的组织的形式,文件可分为ASCII文件和二进制文件。ASCII文件又称文本文件,它的每一个字节放一个ASCII代码,代表一个字符。二进制文件是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。例如:整数12345,在内存中占4个字节,按二进制形式输出在磁盘上也只占4个字节,而按ASCII码形式输出,则占5个字节。3. 处理文件的方式在C语言中有两种处理文件方式:缓冲文件系统和非缓冲文件系统。对于缓冲文件系统,系统会自动地在内存中为每个正在使用的文件开辟一个缓冲区。在从磁盘读数据时,一次从磁盘文件将一些数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个将数据送给接受变量;向磁盘文件输出数据时,先将数据送到内存缓冲区,装满缓冲区后才一起输出到磁盘。减少对磁盘的实际访问(读/写)次数。ANSI C只采用缓冲文件系统。用于操作缓冲文件系统的函数称为标准函数,其头文件为stdio.h。非缓冲文件系统:不由系统自动设置缓冲区,而由用户根据需要设置。用于操作非缓冲文件系统的函数称为系统级函数4. 文件指针(1)文件类型在缓冲文件系统中,系统会为每个被使用的文件在内存中开辟一个区,用来存放文件的有关信息(如文件的名字、文件状态及文件当前位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是由系统定义的,取名为FILE。(2)文件指针变量(文件指针)通常对FILE结构体的访问是通过FILE类型指针变量(简称:文件指针)完成。当系统打开一个文件后,系统会创建一个文件变量,并返回此文件变量的地址(即文件变量的指针,简称文件指针);将此文件指针保存在一个文件指针变量中,以后所有对文件的操作都通过此文件指针变量完成;当关闭文件时,文件指针指向的文件类型变量将被释放。例如:FILE *fp;fp=fopen(mydata.txt,.); /* 打开文件时,系统开辟一个文件变量,并返回文件指针,将此指针赋值(保存)给文件指针变量fp */fclose(fp); /* 关闭文件,释放文件指针fp指向的文件变量 */5. 文件的操作过程对文件的操作的步骤可总结为:先打开,后读写,最后关闭。例如:#include main() FILE *fp; /定义文件指针 char c; fp=fopen(d:test.dat, w+); /打开文件 c=fgetc(fp); /从文件中读取一个字符 putchar( c ); fclose(fp); /关闭文件6. 顺序读写与随机读写 在文件的读写过程中,系统为打开的文件设置了一个位置指针,用于标记当前读写数据的位置。文件被打开时,文件位置指针位于文件头部,每一次读写文件操作,文件的位置指针将向后(文件尾方向)移动,移动的距离为这次文件操作的数据总字节数。文件位置指针是一个无符号的长整型数,其最小值为0,最大值为文件的长度。 所谓顺序读写是指读写文件只能从文件头开始,依次读写各个数据。所谓随机读写,是指文件读写操作可从文件任意一个位置开始,当读写完一个数据以后并不一定读写其后续数据,可能后续的读写操作在当前文件指针的前面若干字节位置,也可是在其后若干字节位置。随机文件的读写关键是能够按需移动文件的位置指针,也就是文件定位。9.1.2 常用的文件操作函数1. 文件的打开和关闭(1)文件的打开(fopen函数)格式: FILE *fopen(char *filename, *type)作用:用于打开文件。 返回:如果成功地打开一个文件,fopen( )函数返回文件指针;否则返回空指针( NULL )。由此可判断文件打开是否成功。说明:fopen( )函数中第一个形式参数表示文件名,可以包含路径和文件名两部分。如: D:TEST.DAT C:VCTEST.DAT 如果将路径写成C:VCTEST.DAT是不正确的,这一点要特别注意。这是因为在字符串中字符 才表示一个字符 ,其中第一个 表示转移字符的引导符。第二个形式参数表示打开文件的类型。关于文件类型的规定参见表9.1。 表9.1 文件操作类型 字符 含义 r 为输入而打开文本文件(只读)(相当于rt) w 为输出而打开/创建文本文件(只写)(相当于wt) a 打开/创建文本文件用于数据增补(相当于at) rb 为输入而打开一个二进制文件(只读) wb 为输出而打开/创建一个二进制文件(只写) ab 打开/创建一个二进制文件用于增补数据 r+ 打开一个文本文件读/写 (有些系统为rw) w+ 打开/创建一个文本文件读/写 (有些系统为wr) a+ 打开/创建一个文本文件用于数据增补(有些系统为ar) rb+ 打开一个二进制文件读/写 wb+ 打开/创建一个二进制文件读/写 ab+ 打开/创建一个二进制文件用于数据增补 (2)文件的关闭(fclose函数)格式:int fclose(FILE *stream)作用:用来关闭一个由fopen( )函数打开的文件。返回:该函数返回一个整型数。当文件关闭成功时,返回0;否则返回一个非零值。可以根据函数的返回值判断文件是否关闭成功。说明:也可用ferror函数来测试文件是否关闭成功。例如: #iclude main( ) FILE *fp; / 定义一个文件指针 int i; fp=fopen(d:test.dat, rb); / 打开d盘根目录下的test.dat文件只读 if (fp= =NULL) /判断文件是否打开成功 puts(File open error!n); /提示打开不成功 i=fclose(fp); /关闭打开的文件 if(i= =0) /判断文件是否关闭成功 printf(File close OK.n); /提示关闭成功 else puts(File close error.n); /提示关闭不成功 2. 单字符/字节读写(1)单个字符/字节的读(fgetc函数)格式:int fputc(FILE *stream)作用:从指定的文件(流)中读取一个字符(一个字节)。返回:当fgetc函数运行成功时,返回一个字符;失败,则返回EOF(即-1)。说明:stream指向的文件必须是以读或读写方式打开的。fgetc函数可用于文本文件读,也可以用于二进制文件。示例: ch=fgetc( fp ) ; / fp为文件指针,ch为字符变量(2)单个字符/字节的写(fputc函数)格式:int fputc(int c, FILE *stream)作用:向一个已经打开的文件(流)中写一个字符/字节。返回:函数运行成功返回这个字符,失败返回EOF(即-1)。说明:stream指向的文件必须是以写或读写方式打开的。c为要写入的字符。fputc函数可用于文本文件读,也可以用于二进制文件。示例: fputc(X,fp); / fp为文件指针3. 字符串读写(1)字符串读(fgets函数)格式:char * fgets( char * string, int n, FILE * stream )作用:从文件(流)stream中读取最多n-1个字符组成的串到string数组中。返回:如果成功则返回string的指针;遇到文件结尾或读取操作出错时,返回NULL。说明:当从文件中读取第n-1个字符后,或读取数据过程中遇到换行符n或文件结束EOF时,函数返回。因此返回的字符串长度不一定正好是n-1,有可能小于n-1。示例:fgets( str, 8, fp ) ; /fp为文件指针,str为字符指针或数组名(2)字符串写(fputs函数)格式:int fputs( char * string, FILE * stream )作用:向指定的文件中写入一个字符串。返回:成功时返回一个非负数,通常返回0;出错时返回 EOF(-1)。说明:fputs函数不会将字符串的结束符0写入到文件中,也不会自动向文件写入换行符,除非string中包含换行符。示例: fputs( str, fp ); / fp为文件指针,str为字符指针或数组名 Fputs(nabcdn,fp) ; 4. 格式化读写(1)格式化读(fscanf函数)格式:int scanf( FILE * stream, char * fmt, input_list )作用:从文件中按指定的格式读取数据。返回:成功时返回正确读取的数据的项数,出错时返回EOF。说明:fscanf的功能是按照fmt所给出的输入控制符,从文件stream中读取数据,分别赋给input_list中各个成员。格式化参数fmt的用法与scanf函数相同。fscanf函数与scanf函数功能相似,区别在于scanf 函数是读取从键盘上输入的数据,fscanf则读取文件中的数据。当fscanf的stream为stdin时,fscanf与scanf能够起相同的作用。在fscanf读取数据时,若遇到文件尾则返回EOF。示例:fscanf( fp, %d,%d, &no, &number) ; /从fp中读取两个整数,分别赋给no和number(2)格式化写(fprintf函数)格式:int * fprintf( FILE * stream, char *fmt, out_list)作用:将数据按指定格式输出到文件。返回:成功时返回写到文件中的数据的字节数,出错时返回EOF。说明:fprintf的功能是按照fmt所给出的输出控制符,将out_list中的各成员的值写到文件stream中。格式化参数fmt的用法与printf函数相同。fprintf函数与printf函数功能相似,区别在于printf 函数是向显示器输出数据,fprintf则向文件输出数据。当fprintf的stream为stdout时,fprintf与printf能够起相同的作用。示例:fprintf( fp, “%d,%d”,no,number); /将no和number的值按十进制整数格式写入到文件fp中5. 数据块读写(1)数据块读(fread函数)格式:int fread( void *ptr, ing size, int n, FILE * stream )作用:从文件中读取指定个数的字符(字节)数据。返回:成功时返回实际读取的数据项的个数,出错时返回一个出错的短整型数据,可能为零。说明:fread的功能是从stream文件中读取n项数据,每一项数据大小为size,读取的数据存放在ptr所指的内存块中。fread读取的数据总字节数为size*n。fread函数一般用于二进制模式打开的文件中,也可用于文本方式打开的文件。示例:fread(x,200,12 ,fp); /从fp中共读取200*12=2400个字节数据到x。x可为数组名或指针(2)数据块写(fwrite函数)格式:int fwrite( void * ptr, int size, int n, FILE * stream )作用:向文件中写入指定个数的字符(字节)数据。返回:成功时返回实际写入的数据项的个数,出错时返回一个出错的短整型数据,可能为零。说明:fwrite的功能是将ptr所指内存块中n个大小为size的数据写入到stream文件中。fwrite写入的数据总字节数为size*n。fread函数一般用于二进制模式打开的文件中,也可用于文本方式打开的文件。示例:fwrite(x,200,12 ,fp); /将x中200*12=2400个字节数据写入到fp文件中。6. 文件定位(1)文件定位函数(fseek函数)格式:int fseek( FILE * stream, long offset, int position)作用:移动文件位置指针。返回:成功时返回值为0,出错时返回一个非零数。说明:fseek函数的功能是将文件位置指针从position位置开始移动offset个字节位置。offset的取值有两种情况:offset0,表示位置指针要向前(文件尾)移动;offset0,表示位置指针要向后(文件头)移动;position的取值有三种情况:position=0或position=SEEK_SET,表示文件的开始处(文件头);position=1或position=SEEK_CUR,表示文件位置指针的当前位置;position=0或position=SEEK_END,表示文件末尾。示例:fseek( fp, 201, SEEK_SET ) ; /从文件头向前移动201个字节位置fseek( fp, -201, SEEK_CUR ) ; /从当前位置向后移动201个字节位置fseek( fp, -201, SEEK_END ) ; /从文件尾向后移动201个字节位置(2)位置函数(ftell函数)格式:long ftell( FILE * stream )作用:获取文件的当前位置指针值。返回:成功时返回文件的当前位置指针值(一个长整型数),出错时返回-1。说明:ftell函数的功能是返回stream文件当前文件位置指针的值,其值代表从文件头开始的位移量。示例: loc = ftell( fp ) ;(3)重定位函数(rewind函数)格式:void rewind( FILE * stream )作用:将文件的位置指针移到文件头。返回:该函数没有返回值。示例: rewind( fp ) ;7. 文件检测(1)文件结束检测(feof函数) 格式:int feof( FILE * stream )作用:检测当前文件位置指针是否到达文件末尾。返回:如文件位置指针到达文件末尾,则返回1,否则返回0。示例:if ( !feof( fp ) ) cc=fgetc( fp ) ; / 若文件读写位置没有到达文件尾则从文件中读取一个字符。(2)读写文件出错检测(ferror函数)格式: int ferror( FILE * stream )作用:检查文件在用各种输入输出函数进行读写时是否出错。返回:如ferror返回值为0表示未出错,否则表示有错。说明:当执行文件打开操作fopen时,ferror的初值为0;每一个文件输入/输出操作函数都会产生一个新的ferror值。只有执行完一个文件输入/输出操作后立即通过ferror函数获取文件输入/输出操作的状态,否则其ferror值会在下一个文件输入/输出操作完成后被覆盖。示例: err = ferror( fp ) ;(3)文件出错标志和文件结束标志置0函数(clearerr函数) 格式: void clearer( FILE * stream ) 作用:用于清除出错标志和文件结束标志,使它们为0值。9.2 实训内容实验一 验证性实验一、实验目的1、掌握文件输入输出操作的基本过程。2、验证常用的文件操作函数的使用方法。二、实验设备和仪器1、IBM PC或兼容计算机2、Windows 9x/2000/XP操作系统3、Visual C+6.0三、实验内容(一)调试程序1:1、实验要求:编程尝试打开当前目录下的sample.txt文件。2、程序代码:程序代码ex9_1.c如下:#include #include main() FILE * fp; if ( ( fp= fopen(sample.txt,r) = NULL ) printf(file cant opened!n); exit( 1 ); else printf(open file success!n); fclose( fp ) ;3、实验步骤步骤一:在D盘的根目录中创建一个以你的学号命名的文件夹,如D:200710003。步骤二:打开“Microsoft Visual C+”软件,在以你的学号命名的文件夹下建立ex9_1.c文件,将2中的源代码输入并保存。步骤三:在以你的学号命名的文件夹中建立一个文本文件sample.txt,文件内容为:sample。步骤四:编译并运行程序。结果如图9-1所示。图9-1 文件正常打开步骤五:将sample.txt文件删除。再运行程序。结果如图9-2所示。图9-2 文件打开失败(二)调试程序2:1、实验要求: 采用fgetc和fputc函数实现文件的复制功能,将sample.txt文件复制到文件samp.txt中。2、程序代码ex9_2.c如下:#include #include main() FILE * sfp, *dfp; char c ; if ( ( sfp= fopen(sample.txt,r) = NULL ) printf(file cant opened!n); exit( 1 ); if ( ( dfp= fopen(samp.txt,w) = NULL ) printf(file cant created!n); fclose( sfp ) ; exit( 1 ); c=fgetc( sfp ); while( c!=EOF ) fputc( c, dfp ); c=fgetc( sfp ); fclose( sfp ) ; fclose( dfp ) ;3、实验步骤步骤一:打开“Microsoft Visual C+”软件,在以你的学号命名的文件夹下建立ex9_2.c文件,将2中的源代码输入并保存。步骤二:在以你的学号命名的文件夹中建立一个文本文件sample.txt,文件内容为:sample。步骤三:编译并运行程序。步骤四:打开你的学号命名的文件夹,查找是否存在samp.txt文件。若存在,打开该文件查看文件的内容,并与sample.txt文件的内容进行比较。当两个文件中的内容完全一样时,说明程序运行正确;否则检查源代码,或检查sample.txt文件是否创建正确。(三)调试程序3:1、实验要求: 实现简易的电子评教系统。每位学生根据9项指标按优、良、中、差(分别取值为1.0、0.8、0.6、0.4)给授课教师评定一个等级。现已经采集到了学生给教师的打分表,要编写一个程序统计被评估教师的最后得分。 input.dat文件中存放了学生对3位教师的评教打分数据。output.dat文件中存放最后的结果。2、程序代码ex9_3.c如下:#include main( ) int i,j,k,number,no,w9=10,10,5,15,5,10,10,15,20; float sum, y, x9; FILE *fp1, *fp2; if (!(fp1=fopen(input.dat,r) printf(打开输入文件错!); return; if (!(fp2=fopen(output.dat,w) printf(打开输出文件错!);fclose(fp1); return; printf(被评估教师的最后得分n); for (k=0;k3;k+) sum=0; fscanf(fp1,%d,%d,&no,&number);for (j=0;jnumber;j+) y=0; for (i=0;i9;i+) fscanf(fp1,%f,&xi); y=y+xi*wi; sum=sum+y;sum=sum/number;fprintf(fp2,%d,%fn,no,sum); printf(%d,%fn,no,sum); fclose(fp1);fclose(fp2);3、实验步骤步骤一:打开“Microsoft Visual C+”软件,在以你的学号命名的文件夹下建立ex9_3.c文件,将2中的源代码输入并保存。步骤二:在以你的学号命名的文件夹中用记事本建立一个文件input.dat,文件内容r如下:1,31.0 1.0 1.0 0.8 1.0 1.0 1.0 0.6 1.01.0 1.0 1.0 1.0 1.0 1.0 0.8 0.6 1.01.0 0.8 1.0 1.0 1.0 0.8 1.0 0.8 1.02,31.0 1.0 0.8 1.0 0.8 1.0 0.8 1.0 0.60.8 1.0 0.8 0.8 0.6 0.8 1.0 1.0 0.41.0 0.6 1.0 1.0 0.8 1.0 0.8 0.6 0.83,30.6 1.0 1.0 0.8 0.4 0.6 0.6 0.4 1.00.8 0.8 0.6 1.0 0.8 0.6 0.4 0.8 1.01.0 0.8 0.8 0.6 1.0 1.0 0.6 0.6 0.4步骤三:编译并运行程序。步骤四:程序的运行结果如图9-3所示。步骤五:查看打开你的学号命名的文件夹,查找是否存在output.dat文件。并使用记事本打开该文件,文件内容与9-3所示内容相同。图9-3 ex9_3程序输出结果 (四)调试程序4:1、实验要求: 编程实现如下功能:定义一个字符数组,该数组中存放z-a共26个字母。使用fwrite将该数组写入到fread.out文件中,然后使用fread函数从fread.out文件中将26个字母读出放到一个数组中并输出到屏幕。2、程序代码ex9_4c如下:#include void main() FILE *stream; char list30, rlist30=0; int i, numread,numwritten; if (stream=fopen(fread.out,w)!=NULL) for (i=0;i26;i+) listi=(char)(z-i); numwritten=fwrite( list, sizeof(char),26,stream); printf(写入了 %d 个数据n,numwritten); fclose(stream); else printf(输出文件打开错误!); return; if (stream=fopen(fread.out,r)!=NULL) numread=fread( rlist, sizeof(char),26,stream); printf(读出了 %d 个数据n,numwritten); fclose(stream); printf(读入的数据为:%sn,rlist); else printf(输入文件打开错误!); return; 3、实验步骤步骤一:打开“Microsoft Visual C+”软件,在以你的学号命名的文件夹下建立ex9_4c文件,将2中的源代码输入并保存。步骤二:编译并运行程序。程序正确的运行结果如图9-4所示:图9-4 ex9_4程序运行结果步骤三:用记事本打开你的学号命名的文件夹中的fread.out文件。文件内容如图9-5所示。图9-5 fread.out文件的内容(五)调试程序5:1、实验要求: 编程实现如下功能:先将100个整数写入到一个文件中,然后从文件中读取第50个整数的值。2、程序代码ex9_5.c如下:#include void main() int a; FILE *fp1,*fp2; fp1=fopen(integer.dat,wb); if (fp1=NULL) printf(不能创建interger.datn); return; for (a=1;a=100;a+) fwrite(&a,sizeof(int),1,fp1); fclose(fp1); fp2=fopen(integer.dat,rb); fseek(fp2,49*sizeof(int),SEEK_SET); fread(&a,sizeof(int),1,fp2); fclose(fp2); printf(第50个数据是:%dn,a);3、实验步骤步骤一:打开“Microsoft Visual C+”软件,在以你的学号命名的文件夹下建立ex9_5c文件,将2中的源代码输入并保存。步骤二:编译并运行程序。程序正确的运行结果如图9-6所示:图9-6 ex9_5程序运行结果步骤三:依次点击“开始 | 运行”,在打开的“运行”对话框中输入cmd。如图9-7所示。图9-7 运行对话框步骤四:在打开的窗口中依次输入如下命令: d: cd 200710003 debug integer.dat注意:每输入一条命令要按一次回车键。如图9-8所示。其中:第一条命令为“d:”,表示将当前盘符转到d盘;第二条命令为“cd 200710003”,表示进入d盘根目录下的200710003文件夹。实际操作时 将200710003改为你的学号;第三条命令为“debug integer.dat”,表示使用debug程序将integer.dat文件的内容载入内存中。图9-8 在命令行状态下进入以你学号命名的文件夹步骤四:在debug程序中查看integer.dat文件中内容。在debug程序的命令行输入: d,再按回车;再次输入d,按回车。结果如图9-9所示。图中所示的数据为16进制。1363:0100表示地址;其后表示1到4四个数值在文件中依次存储的方式。其中01 00 00 00 表示数值1,其存储类型为int。02 00 00 00 表示数值2,03 00 00 00 表示数值3,04 00 00 00 表示数值4。以下各行类似。图9-9 integer.dat文件的内容步骤五:输入q,再按回车键,退出debug程序。五、实验报告要求1、写出以上五个程序的实验原理与考查知识点。2、写出在程序调试过程中遇到的问题和解决方法。实验二 启发性实验一、实验目的1、掌握文件程序设计与调试的方法。2、掌握文件程序填空的方法。3、掌握文件程序改错技巧。4、掌握文件程序编程能力二、实验设备和仪器1、IBM PC或兼容计算机2、Windows 9x/2000/XP操作系统3、Visual C+6.0三、实验准备 1、预习常用文件操作函数的用法。 2、在D盘的根目录中创建一个以你的学号命名的文件夹,如D:200710003。四、实验内容一、 填空:程序ex9blank.c的功能是,先以只写方式打开文件“out.dat”,再把字符串str中的字符保存到这个磁盘文件中。请补充main函数。#include #include #define N 80 main() FILE *fp; int i = 0; char ch; char strN = Im a students!; if (fp = fopen(_1_) = NULL) printf(Can not open out.dat. n); exit(0); while (stri) ch = stri; _2_; putchar(ch); i+; _3_; 二、改错:给定的程序ex9modi.c功能为:录入一组书籍的信息(包括:书号,作者,书名),并将书籍信息存储到books.txt文件中。请根据提示修改程序,并调试通过。不能增加行也不能删除行。#include struct book int num; char au10; char name20;BOOK;main() FILE *fp;int i,n; BOOK stud; /*ERROR*/ fopen(r,books.txt); printf(add book.nwhen mumber0 & i100 ) /*ERROR*/ fread(fp, &stud,sizeof(BOOK),1); scanf(%d,%s,%s,&stud.num,stud.au,); fclose(fp);三、编程:程序ex9proc.c的功能为:学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中。程序要把分数最低的学生数据放在h所指的数组中,然后输出到out.dat文件中。请补充完整程序。注意:分数最低的学生可能不止一个。out.dat文件的格式为:文本文件;总共为n+1行;第一行为分数最低的学生的人数n的值;后面n行每一行为一个学生的数据,具体格式为:学号(5位,左对齐,不足的补空格)+ 一个空格 + 成绩(两位)。例如,文件内容为:2GA012_64GA08_64其中_代表空格。程序代码如下:#include #define N 16typedef struct char num10; int s; STREC;main() STREC sN=GA05,85,GA03,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论