第11章 文件操作 教学PPT_190904ppt课件.pptx

上传人:春哥&#****71; 文档编号:16978318 上传时间:2022-05-20 格式:PPTX 页数:90 大小:4.87MB
返回 下载 相关 举报
第11章 文件操作 教学PPT_190904ppt课件.pptx_第1页
第1页 / 共90页
第11章 文件操作 教学PPT_190904ppt课件.pptx_第2页
第2页 / 共90页
点击查看更多>>
资源描述

《第11章 文件操作 教学PPT_190904ppt课件.pptx》由会员分享,可在线阅读,更多相关《第11章 文件操作 教学PPT_190904ppt课件.pptx(90页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第11章 文件操作 教学PPT_190904 第第11章章 文件操作文件操作 文件概述 文件打开与关闭 文件读写 文件随机读写 文件检测函数 缓冲区函数 11.1 文件概述对于一台计算机而言,最基本的功能就是存储数据。一般情况下,数据在电脑上都是以文件的形式存放的。程序中需要对文件进行一些操作,例如打开一个文件、向文件写入内容、关闭一个文件等。 11.1.1 计算机中的流在C语言中,将在不同的输入/输出等设备(键盘、内存、显示器等)之间进行传递的数据抽象为“流”。 流实际上就是一个字节序列,输入程序的字节序列被称为输入流,从程序输出的字节序列被称为输出流。11.1.1 计算机中的流 根据数据形

2、式,输入输出流可以被细分为文本流(字符流)和二进制流。文本流和二进制流之间的主要差异是:文本流中输入输出的数据是字符或字符串,可以被修改;二进制流中输入输出的是一系列字节,不能以任何方式修改。文本流与二进制流11.1.1 计算机中的流 在C语言中,有三个系统预定义的流: 标准输入流(stdin,全称standard input):对应键盘输入。 标准输出流(stdout,全称standard output):对应控制台输出。 标准错误输出流(stderr,全称standard error):对应控制台错误输出。这三个标准流都定义在头文件stdio.h中,程序只要包含这个头文件,在程序开始执行时

3、,这些流将自动被打开,程序结束后,则自动关闭,不需要做任何初始化准备。11.1.1 计算机中的流 11.1.2 文件的概念文件是存储在外部介质上的数据的集合。操作系统以文件的形式对数据进行管理,如果要访问数据,必须先通过文件名找到相应的文件,之后才能从文件中读取数据。 一个文件需要有唯一确定的文件标识,以便用户根据标识找到唯一确定的文件。文件标识包含三个部分,分别为文件路径、文件名主干、文件扩展名。11.1.2 文件的概念 11.1.3 文件的分类文本文件二进制文件 11.1.3 文件的分类1、文本文件文本文件又称为ASCII文件,ASCII文件中一个字符占用一个字节,存储单元存放单个字符对应

4、的ASCII码。假设当前需要存储一个整型数据112185,则在文本文件的存储方式如下: 2、二进制文件数据在内存中是以二进制形式存储的,如果不加转换地输出到外存,则输出文件就是一个二进制文件。二进制文件就是存储在内存的数据的映像,也称为映像文件。使用二进制文件存储整数112185,存储形式如下图:11.1.3 文件的分类 总体来说,二进制文件较小,生成的速度快,加载的速度也快,但文件内容往往需要解析才可读。文本文件相对较大,生成与加载的速度比二进制文件要慢,但文本文件无需任何转换就可以看到其内容。11.1.3 文件的分类 11.1.4 文件指针在C语言中,所有的文件操作都必须依靠指针来完成,因

5、此如果要对文件进行操作,必须先定义指向文件的指针,然后通过文件指针完成对文件的操作。文件指针的定义格式如下:FILE *变量名; 11.1.4 文件指针FILE是由系统声明的定义文件指针的结构体,用于保存文件相关信息,如文件名、文件位置、文件大小、文件状态等。不同的系统环境或不同编译器环境下FILE结构体的定义略有差异。 11.1.4 文件指针typedef struct short level;/缓冲区满或空的程度unsigned flags; /文件状态标志char fd;/文件描述符unsigned char hold;/若无缓冲区不读取字符short bsize; /缓冲区大小unsi

6、gned char *buffer;/数据传送缓冲区位置unsigned char *curp;/当前读写位置unsigned istemp;/临时文件指示short token;/无效检测FILE;/结构体类型名 FILE 11.1.4 文件指针当定义一个文件指针时,系统根据FILE结构体分配一段内存空间作为文件信息区,用于存储要读写文件的相应信息。FILE * fp;上述代码定义了文件指针fp,它指向文件信息区,但此时,fp尚未关联任何文件,因此文件信息区未保存任何文件信息。 11.1.4 文件指针文件指针通过fopen()函数关联文件,fopen()函数用于打开文件。fp=fopen(a

7、.txt);上述代码中,通过fopen()函数将文件指针fp与a.txt文件关联起来,a.txt文件的信息(文件名、文件大小、文件位置、文件状态等)就会保存到fp指向的文件信息区,通过文件指针fp就可以操作a.txt文件了。 11.1.4 文件指针 一个文件指针变量只能指向一个文件,如果要操作多少个文件,就要定义同样数量的文件指针,分别指向不同的文件。11.1.4 文件指针 11.1.5 文件位置指针将一个文件与文件指针进行关联之后,即打开了文件,系统会为每个文件设置一个位置指针,用来标识当前文件的读写位置,这个指针称为文件位置指针。 文件位置指针 一般在文件打开时,文件位置指针指向文件的开头

8、。在读取文件时,文件位置指针会自动向后移动,读取结束,文件位置指针指向最后一个数据之后。11.1.5 文件位置指针 当文件读取完毕时,文件位置指针指向最后一个数据之后,这个位置称为文件末尾,用EOF标识,EOF是英文“end of file”的缩写,被称为文件结束符。EOF是一个宏定义,其值为-1,定义在stdio.h头文件中,通常表示不能再从流中获取数据。11.1.5 文件位置指针 向文件中写入数据与从文件中读取数据是相同的,每写完一个数据后,文件的位置指针自动按顺序向后移一个位置,直到数据写入完毕,此时文件位置指针指向最后一个数据之后,即文件末尾。11.1.5 文件位置指针 有时,在向文件

9、中写入数据时,希望在文件末尾追加数据,而不是覆盖原有数据,可以将文件位置指针移至文件末尾再进行写入。11.1.5 文件位置指针 11.2.1 文件打开和关闭文件最基本的操作就是打开和关闭,在对文件进行读写之前,需要先打开文件;读写结束之后,则要及时关闭文件。 1、fopen()函数fopen()函数用于打开一个文件。FILE* fopen(char* filename,char* mode); 返回值类型FILE*表示该函数返回值为文件指针类型; 参数filename用于指定文件的绝对路径,即用来确定文件包含路径名、文件名主干和扩展名的唯一标识; 参数mode用于指定文件的打开模式。11.2.

10、1 文件打开和关闭 打开模式打开模式名称名称描述描述r/rbr/rb只读模式以只读的形式打开一个文本文件/二进制文件,如果文件不存在或无法找到,fopen()函数调用失败,返回NULLw/wbw/wb只写模式以只写的形式创建一个文本文件/二进制文件,如果文件已存在,重写文件a/aba/ab追加模式以只写的形式打开一个文本文件/二进制文件,只允许在该文件末尾追加数据,如果文件不存在,则创建新文件r+/rb+r+/rb+读取/更新模式以读/写的形式打开一个文本文件/二进制文件,如果文件不存在,fopen()函数调用失败,返回NULLw+/wb+w+/wb+写入/更新模式以读/写的形式创建一个文本文

11、件/二进制文件,如果文件已存在,则重写文件a+ab+a+ab+追加/更新模式打开一个文本/二进制文件,允许进行读取操作,但只允许在文件末尾添加数据,若文件不存在,则创建新文件11.2.1 文件打开和关闭 文件正常打开时,函数返回指向该文件的文件指针;文件打开失败时,函数返回NULL。一般在调用该函数之后,为了保证程序的健壮性,会进行一次判空操作。11.2.1 文件打开和关闭FILE * fp;fp = fopen(D:test.txt, r);if(fp = NULL) printf(打开失败!n); exit(0); / 退出程序 mode参数为char *类型,在实际开发过程中必须使用字符

12、串的形式,如果将字符串“r”写成字符r就会使程序出现错误。11.2.1 文件打开和关闭 2、fclose()函数fclose()函数用于关闭文件。int fclose(FILE *fp);参数fp表示待关闭的文件;函数返回值类型为int,如果成功关闭则返回0,否则返回EOF。11.2.1 文件打开和关闭 #define _CRT_SECURE_NO_WARNINGS#include #include int main() FILE* fp; fp = fopen(hello.txt, w); if (fp = NULL)printf(无法打开hello.txtn);exit(0); fputs

13、(Hello, world!n, fp); fclose(fp); printf(文件写入成功n); return 0;11.2.1 文件打开和关闭 11.2.2 文件写入1、使用fputc()函数向文件写入字符fputc()函数用于向文件中写入一个字符。int fputc(int c, FILE* stream); c表示写入的内容; stream表示一个文件指针。 函数返回值为int类型 返回成功写入的字符; 写入失败返回EOF。 11.2.2 文件写入FILE *fp;int i=0;char arr=I Like C Program;fp = fopen(hello.txt, w);

14、if (fp = NULL)printf(打开文件失败!n);exit(0);while (arri != 0) fputc(arri, fp);i+;fclose(fp); 11.2.2 文件写入程序成功运行后,在项目根目录下会生成hello.txt文件。 11.2.2 文件写入2、使用fputs()函数向文件写入字符串fputs()函数用于将字符串写入文件。int fputs(const char *str, FILE* stream);参数str表示指向待写入的字符串的字符指针,参数stream表示文件指针。fputs()函数向指定的文件写入一个字符串(不自动写入字符串结束标记符0),如

15、果写入成功,函数返回0,否则返回EOF。 11.2.2 文件写入FILE * fp;char * str3; int i;str0 = I Like C Programn; str1 = It Is Amazingn;str2 = It Is Interestingn;fp = fopen(hello.txt, w);if(fp = NULL)printf(打开文件失败!n);exit(0);for (i = 0; i 3; i+)fputs(stri, fp);fclose(fp); 11.2.2 文件写入程序成功运行后,在项目根目录下打开hello.txt文件。 11.2.2 文件写入3、

16、使用fwrite()函数向文件写入数据fwrite()函数用于以二进制的形式将数据写入文件。size_t fwrite(const void * ptr, size_t size, size_t nmemb, FILE * stream);参数ptr表示指向待写入数据的指针;参数size表示待写入数据的字节数;参数nmemb表示待写入size个字节的数据的个数;参数stream表示文件指针;返回值:写入成功返回写入的数据个数,写入失败返回0。 11.2.2 文件写入程序执行成功后,会在项目根目录中生成fread.txt文件,打开fread.txt文件,发现字符串被成功写入文件。 11.2.2

17、文件写入4、使用fprintf()函数向文件写入数据fprintf()函数用于将数据格式化写入文件。int fprintf(FILE * stream, const char * format,.); 参数stream表示文件指针; 参数format表示以什么样的字符串格式输出到文件中;该函数根据指定的字符串格式将字符串写入到指定的文件中。 函数调用成功返回输出的字符数;否则,返回EOF。 11.2.2 文件写入FILE *fp;fp = fopen(hello.txt, w); if (fp = NULL)printf(打开文件失败!n);exit(0);fprintf(fp, I am a

18、 %s, I am %d years old., student, 18);fclose(fp); 11.2.2 文件写入程序运行成功后,会在当前项目根目录下生成一个hello.txt文件,打开文件,发现字符串被成功写入文件hello.txt中。 11.2.3 文件读取1、使用fgetc()函数读取文件中的字符fgetc()函数用于读取文件中的字符。int fgetc(FILE* stream);参数stream表示一个文件指针。函数将读取的字符转换成整数返回,读取文件到达末尾或读取错误时返回EOF。 11.2.3 文件读取FILE *fp;char ch;fp = fopen(hello.t

19、xt, r);if (fp = NULL)printf(打开文件失败!n);exit(0); ch = fgetc(fp);while (ch != EOF)printf(%c, ch);ch = fgetc(fp);printf(n);fclose(fp); 11.2.3 文件读取2、使用fgets()函数读取文件中的字符串fgets()函数用于从文件中读取一行字符串,或读取指定长度的字符串。char * fgets(char * s, int size, FILE * stream); 参数s指向用来存储数据的空间; 参数size表示读取数据的大小; 参数stream表示要读取的文件的文件

20、指针。 函数读取成功返回s,如果读取错误或遇到文件末尾,返回NULL。 11.2.3 文件读取fgets()函数从文件指针stream指向的文件中读取数据,最多读取size-1个字符,将读取的数据保存到s指向的字符数组中,读取的字符串会在最后一位添加0。 11.2.3 文件读取fgets()函数停止读取的情况通常包括以下三个: 读取size-1个字符前,遇到n,读取结束,末尾添加0。 读取size-1个字符前,遇到EOF,读取结束,末尾添加0。 完成size-1个字符读取,读取结束后,末尾添加0。 11.2.3 文件读取FILE * fp;char str256;memset(str, 0,

21、sizeof(str);fp = fopen(poem.txt, r);if (fp = NULL) printf(打开文件失败!n);exit(0);while (!feof(fp) fgets(str, sizeof(str), fp);printf(%s, str);fclose(fp); 11.2.3 文件读取3、使用fread()以二进制形式读取文件fread()函数用于以二进制形式读取文件,函数声明如下:size_t fread(void * ptr, size_t size,size_t nmemb, FILE * stream); 参数ptr表示指向要接收读取数据的内存空间的指

22、针; 参数size表示读取元素的大小,以字节为单位; 参数nmemb表示读取元素的个数; 参数stream表示读取文件的文件指针。 函数返回值类型为size_t类型,即返回值的类型为无符号整型。 11.2.3 文件读取fread()函数从一个文件中读取数据,最多读取nmemb个元素,每个元素大小为size个字节。读取成功则返回读取数据的大小。读取错误返回0。 11.2.3 文件读取FILE* fp;char str32; memset(str, 0, sizeof(str);size_t len=0; fp = fopen(fread.txt, r);if (fp = NULL) printf

23、(文件打开失败n);exit(0);while (!feof(fp)len=fread(str, 1, 31, fp); printf(%sn, str); fclose(fp); printf(读取的实际大小为:%d, len); 11.2.3 文件读取4、使用fscanf()函数格式化读取文件fscanf()函数用于从文件中格式化读取数据,函数声明如下:int fscanf(FILE * stream, const char * format, .); 参数stream表示文件指针; 参数format表示文件中的字符串以什么样的格式输入到程序中; 函数调用成功,返回值是输入的参数的个数;否

24、则,返回EOF。 11.2.3 文件读取首先在项目根目录下新建文件hello.txt输入“hello world”后保存。 11.2.3 文件读取char str110, str210;FILE* fp;fp = fopen(hello.txt, r);fscanf(fp, %s %s, str1, str2);fclose(fp);printf(%sn, str1);printf(%sn, str2); 有时,读写文件时,需要从某个特定的位置进行读写,这就是随机读写,随机读写需要移动文件位置指针,C语言提供了三个函数用于定位移动文件位置指针来实现对文件的随机读写,这三个函数是ftell()、

25、fseek ()和rewind()。11.2.4 文件随机访问 1、ftell()函数ftell()函数用于获取文件位置指针的当前位置。long ftell(FILE * fp);参数fp表示文件指针,函数的返回值类型为long,它表示文件位置指针距离文件开头的字节数。ftell()函数调用成功后,返回文件位置指针的当前位置,但如果当文件不存在或发生其他错误时,则函数的返回值为-1L。11.2.4 文件随机访问 2、fseek()函数fseek()函数的作用是将文件位置指针移动到指定位置。int fseek(FILE * stream, long offset, int whence);参数s

26、tream表示一个文件指针,参数offset表示根据参数whence移动读写位置的偏移量。11.2.4 文件随机访问 参数whence有三个取值: SEEK_SET:对应的数字值为0,表示从文件开头进行偏移; SEEK_CUR:对应的数字值为1,相对于文件位置指针当前位置进行偏移; SEEK_END:对应的数字值为2,相对于文件末尾向前偏移。11.2.4 文件随机访问 fseek()函数调用成功返回0,调用失败返回-1。通常情况下,fseek()函数适用于二进制文件,因为文本文件要进行字符转换,计算位置时往往会发生混乱。11.2.4 文件随机访问fseek() 假设现在有一个hellow.tx

27、t文件,文件内容仅有“hello world”一行字符串。11.2.4 文件随机访问 11.2.4 文件随机访问FILE* fp;char s16 = 0;fp = fopen(hellow.txt, r);fseek(fp, 7, SEEK_SET);fread(s, 1, 15, fp);fclose(fp);printf(%s, s); fseek()函数一般用于二进制文件,因为对文本文件进行操作时,需要进行字符转换,对位置的计算可能会发生错误。11.2.4 文件随机访问 3、ftell()函数ftell()函数用于获取文件位置指针的当前位置。long ftell(FILE * stre

28、am);参数stream表示文件指针。ftell()函数调用成功后,返回文件位置指针的当前位置,但如果当文件不存在或发生其他错误时,则函数的返回值为-1L。11.2.4 文件随机访问 FILE * fp;fp = fopen(hellow.txt, r);fseek(fp, 5, SEEK_SET);printf(offset = %dn, ftell(fp);rewind(fp); printf(offset = %dn, ftell(fp);fseek(fp, 11, SEEK_CUR); printf(offset = %dn, ftell(fp);fclose(fp);11.2.4 文

29、件随机访问 11.2.5 文件重命名与文件删除1、rename()函数rename()函数用于对文件重命名。int rename(const char * oldname,const char * newname) 参数oldname表示要修改的文件名; 参数newname表示修改后文件名; 修改成功则返回0,如果修改的文件名与以修改的文件名重名,或者修改的文件不存在时返回非0值。 11.2.5 文件重命名与文件删除FILE* fp;char s20 = 0;int x=rename(hellow.txt,1.txt);printf(修改状态:%dn, x);fp = fopen(1.txt,

30、 r);while (!feof(fp)fgets(s, 20, fp); fclose(fp);printf(%sn, s); 11.2.5 文件重命名与文件删除2、remove()函数remove()函数用于删除文件。int remove(const char *Filename)remove()函数只有一个参数Filename,表示要删除的文件名。删除成功返回0,删除失败返回-1。 11.2.5 文件重命名与文件删除FILE* fp;char* s20 = 0 ;int x=remove(1.txt);printf(修改状态:%dn, x);fp = fopen(1.txt, r);if

31、 (fp=NULL)printf(文件打开失败n);exit(0); while (!feof(fp)fgets(s, 20, fp); fclose(fp);printf(%sn, s); 11.3 文件检测函数文件读写操作难免会发生错误,但大多函数并不具有明确的错误提示信息,例如fputc()函数返回EOF时,可能是因为文件结束,也可能是因为调用函数失败。为了明确地检查文件读写过程中出现的错误,C语言中提供了文件检测函数:perror()函数、ferror()函数、feof()函数。 11.3.1 perror()函数perror()函数用于打印错误消息,将标准错误中定义的错误值errno

32、解释为错误消息并打印到标准错误输出流stderr。void perror(const char * str);str指向一个字符串,在标准错误输出时,可选择在错误信息输出前加上自定义消息。错误输出中的errno是一个整型变量,其值代表调用标准库函数产生的错误原因。 11.3.1 perror()函数#define _CRT_SECURE_NO_WARNINGS#include int main()FILE* fp;fp = fopen(perror.txt, r+);if (fp = NULL)perror(打开失败); 11.3.2 ferror()函数ferror()函数用于检查输入输出函

33、数进行读写操作时是否出错。int ferror(FILE * stream);参数stream表示一个文件指针。如果对文件进行读写操作时出错,该函数返回1,没有出现错误返回0。 11.3.2 ferror()函数FILE* fp;fp = fopen(ferror.txt, r);if (pFile = NULL)perror(文件打开失败!);fputc(A, fp);if (ferror(fp)perror(写入错误!n);fclose(fp);return 0; 11.3.3 feof()函数feof()函数用于判断文件是否处于文件结束位置。int feof(FILE * stream)

34、;参数stream表示一个文件指针。如果文件已处于文件结束位置,该函数返回1,否则返回0。 11.3.3 feof()函数在项目根目录下新建文件feof.txt,并输入itcast,然后保存。 11.3.3 feof()函数FILE* fp;int n = 0;fp = fopen(feof.txt, rb);if (fp = NULL) perror(文件打开错误);while (fgetc(fp) != EOF) n+;if (feof(fp) puts(到达文件末尾);printf(读取到的字符个数为: %dn, n); fclose(fp); 11.3.4 clearerr()函数cl

35、earerr()函数的作用是清除错误标志和文件结束标志。void clearerr(FILE * stream);参数stream表示一个文件指针。当输入或者输出到达文件末尾出现错误时,使用clearerr()函数清除错误指示状态。 11.3.4 clearerr()函数在项目根目录下新建文件clearerr.txt并输入itcast后保存。 11.3.4 clearerr()函数FILE* fp;fp = fopen(clearerr.txt, r);if (fp = NULL) perror(文件打开失败);fputc(A, fp);if (ferror(fp) perror(写入错误);

36、clearerr(fp);fgetc(fp);if (ferror(fp)=0)printf(无读取错误);fclose(fp); 11.4 缓冲区函数当程序执行读文件操作时,会将文件内容读到缓冲区中,然后再将内容从缓冲区逐个读到程序中。程序执行写文件操作时,先将数据写入到缓冲区中,待缓冲区装满后再将数据从缓冲区一起写入到磁盘文件中。这样有利于提高程序读取文件的效率。针对输入输出缓冲区,C语言提供了相关函数:fflush()函数、setbuf()函数、setvbuf()函数。 11.4.1 fflush()函数fflush()函数用于清空文件缓冲区和标准输入输出缓冲区。int fflush(F

37、ILE * stream)在文件写入时如果文件是以写的方式打开,fflush()函数会把缓冲区内的数据写入文件。此外,对于标准输入缓冲区fflush(stdin),会刷新缓冲区,将缓冲区内的数据清空并丢弃,对于标准输出缓冲区fflush(stdout),会刷新缓冲区,将缓冲区内的数据输出到设备。 11.4.2 setbuf()函数setbuf()函数用于给输入流输出流设置缓冲区。void setbuf(FILE *stream, char *buf);参数stream表示一个文件指针,指向一个文件流。buf是用户分配的缓冲空间,长度至少是BUFSIZ,BUFSIZ是定义的宏,大小为512字节。

38、 11.4.2 setbuf()函数#define _CRT_SECURE_NO_WARNINGS#include int main()char bufBUFSIZ = 0;setbuf(stdout, buf);puts(Itcast);fflush(stdout);return(0); 11.4.3 setvbuf()函数setvbuf()函数与setbuf()函数的功能都是为输入流和输出流设置缓冲区。不同的是setvbuf()函数可以指定缓冲模式。int setvbuf(FILE *stream, char *buf, int mode, size_t size);参数stream表示一

39、个文件指针。参数buf是分配的缓冲区,如果设置为NULL,该函数会自动分配指定大小的缓冲,参数size表示缓冲区的大小,以字节为单位。参数mode表示文件缓冲模式 11.4.3 setvbuf()函数缓冲模式一共有三种,具体如下:(1)_IOFBF,全缓冲,当缓冲区为空时,从流读入数据,或者当缓冲区满时,向流写入数据。(2)_IOLBF,行缓冲,每次从流中读入一行数据或向流中写入一行数据。(3)_IONBUF,不使用缓冲。接从流中读入数据或直接向流中写入数据,而没有缓冲区。此时参数buffer和参数size参数被忽略。 11.4.3 setvbuf()函数FILE* fp;char buff1

40、024;memset(buff, 0, sizeof(buff);if (setvbuf(stdout, buff, _IOFBF, 1024) != 0)printf(缓冲区设置出错!);return -1;fprintf(stdout, n); fprintf(stdout, C语言程序设计教程n);fflush(stdout);fp = fopen(txt.txt, a+);fprintf(fp, buff);fclose(fp); 11.4.3 setvbuf()函数打开txt.txt文件。 11.5 本章小结本章首先讲解了文件的基本概念,包括流、文件标识、文件指针与文件位置指针;然后讲解了文件的基本操作,包括文件的打开与关闭、单字符读写文件、单行读写文件、二进制形式读写文件;之后讲解了文件的随机读写;最后通过一个案例来加深读者对文件读写的理解。通过本章的学习,读者可以对文件进行读写操作,从而站在更高的层面来理解和使用文件。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁