C语言_文件
来源:互联网 发布:网络客服人员工作职责 编辑:程序博客网 时间:2024/05/24 15:42
#include <iostream>#include <stdlib.h>#include <stdio.h>#include <conio.h>using namespace std;void test1(){// fscanf()// int fscanf(FILE *, const char *, ...)char str1[10] = {0};int num1 = 0;fscanf(stdin, "%s%d", &str1, &num1);printf("str1:%s, num1:%d\n", str1, num1);printf("-------------------------------\n");// scanf()// int scanf(const char *, ...)char str2[10] = {0};int num2 = 0;scanf("%s%d", &str2, &num2);printf("str2:%s, num2:%d\n", str2, num2);}void test2(){// fputs()// int fputs(const char *, FILE *)const char str1[20] = "Hello World\n"; fputs(str1, stdout);// puts()// int puts(const char *)const char str2[20] = "I Love the World\n";puts(str2);}void test3(){// fgets()// char *fgets(char *str, int num, FILE *);char str1[20] = "";fgets(str1, sizeof(str1), stdin);printf(str1);// gets()// char *gets(char *str)char str2[20] = "";gets(str2);printf(str2);}void test4(){// putchar()实际上是putc的宏// int putchar(int)// #define putchar(_c) putc((_c), stdout)putchar('a');// putc()实际上也是宏// int putc(int, FILE *);putc('a', stdout);// fputc()// int fputc(int c, FILE *);fputc('a', stdout);}void test5(){// getchar()// int getchar()// #define getchar() getc(stdin)int ch1 = 0;ch1 = getchar();printf("ch1:%c\n", ch1);// getc()// int getc(FILE *)int ch2 = 0;ch2 = getc(stdin);printf("ch2:%c\n", ch2);// fgetc()// int fgetc(FILE *)int ch3 = 0;ch3 = fgetc(stdin);printf("ch3:%c\n", ch3);}void test6(){// putw()// int putw(int w, FILE *)int w1 = 0;w1 = putw(97, stdout);// getw()// int getw(FILE *)int w2 = 0;w2 = getw(stdin);putw(w2, stdout);}void test7(){// 非标准库函数// 非标准库函数在Windows平台下可以从键盘无回显地读取一个字符,无回显即输入时不显示输入的内容,不过要包含头文件conio.h,Linux平台下没有conio.h这个头文件,也没有这些函数// getch()// int getch()int c1 = 0;c1 = getch();printf("c1:%c\n", c1);// getche()// int getche()int c2 = 0;c2 = getche();printf("c2:%c\n",c2);}int main(int argc, const char *argv[]){test7();return 0;}
//***** 文件 *****//***** 缓冲区和流 *****void test1(){ // 缓冲区 /* 文件通常存储在硬盘中,为避免频繁地读写硬盘,在内存中预留了一定的存储空间,叫做缓冲区。 有了缓冲区,数据不会立即写入到硬盘中,而是先进入缓冲区,等待缓冲区充满后,才一次性地写入硬盘。 而从硬盘读取数据,则是一次性地读取足够的数据到缓冲区,使缓冲区充满, 然后再逐个地将缓冲区中的数据送入程序中,并赋给程序中的各个变量或者直接参与运算。 */ // 流 /* 流其实是一个抽象的概念,它通常表示一个字节序列,流入程序的序列称之为输入流,从程序流出的序列称之输出流。 假如无缓冲区,那么字节序列直接从程序中流入或者流出。 假如有缓冲区,那么字节序列将先进入缓冲区,然后再流入程序或者流出到设备。 程序员无须为每种输入/输出设备或者输入/输出缓冲区编写特定的输入/输出代码,只要将输入/输出视为连续的字节流即可 其他的事情交给流函数或者操作系统来完成,它们会自动处理缓冲区,自动处理字节流与输入/输出设备之间的交互。 */ // C语言中的流 /* C语言定义了一个结构体类型用来管理流,使流与设备和缓冲区之间建立连接。 struct _iobuf { char *_ptr; // 指向当前缓冲区内容的指针,每次后移一个字节 int __cnt; // 如果是输入缓冲区,代表缓冲区里还有多少个有效数据 char *_base; // 缓冲区的起始地址 int _flag; // 流的状态标识,即读写错误后者达到文件尾等标识 int _file; // 文件描述符,可使用fileno函数获得此文件的描述符 int _charbuf; // 双字节的缓冲,即缓冲大小仅为2个字节 int _bufsiz; // 缓冲区的大小 char *tmpfname; // 临时文件名 }; */ // FILE /* 在VC6.0下面,将该流结构体声明为_iobuf,并使用typedef取了个别名为:FILE 顾名思义,_iobuf是输入/输出缓冲区,而FILE是文件的意思,那么,也就是说,这个流类型既可以作为输入/输出缓冲区 也可以作为文件的缓冲区 在头文件stdio.h中定义了3个FILE结构变量,作为3个流,并分别定义了这3个流的结构体指针:stdin,stdout和stderr stdin 代表标准输入流的地址,与默认输入设备(键盘)相连 stdout 代表标准输出流的地址,与默认输出设备(屏幕)相连 stderr 代表标准错误输出的地址,与默认错误输出设备(屏幕)相连 */}//***** 流结构体使用 *****void test2(){ char x; printf("缓冲区里的有效数据:%d\n",stdin->_cnt); printf("指向缓冲区的指针:0x%p\n",stdin->_ptr); printf("缓冲区的起始地址:0x%p\n",stdin->_base); printf("缓冲区的大小为:%d\n",stdin->_bufsiz); printf("文件描述符:%d\n",stdin->_file); x = getchar(); printf("从缓冲区中提取1个字符:%c\n",x); printf("缓冲区里的有效数据:%d\n",stdin->_cnt); printf("指向缓冲区的指针:0x%p\n",stdin->_ptr); printf("缓冲区的起始地址:0x%p\n",stdin->_base); printf("缓冲区的大小为:%d\n",stdin->_bufsiz); x = getchar(); printf("从缓冲区中提取1个字符:%c\n",x); printf("缓冲区里的有效数据:%d\n",stdin->_cnt); printf("指向缓冲区的指针:0x%p\n",stdin->_ptr); printf("缓冲区的起始地址:0x%p\n",stdin->_base); printf("缓冲区的大小为:%d\n",stdin->_bufsiz); fflush(stdin); printf("从缓冲区中提取出1个字符:%c\n",x); printf("缓冲区里的有效数据:%d\n",stdin->_cnt); printf("指向缓冲区的指针:0x%p\n",stdin->_ptr); printf("缓冲区的起始地址:0x%p\n",stdin->_base); /* fflush()函数操作输入流stdin是微软的编译器对C标准的扩充,它只适用于window平台下的编译器 而对于非window平台的编译器,需要使用__fpurge(stdin)来代替fflush(stdin) */}//***** 读取文件 *****void test3(){ FILE *fp; char ch; char fileName[20]; printf("请输入文件名及其路径:"); scanf("%s",fileName); fp = fopen(fileName,"r"); // "r"指明是以"只读"方式打开文件 if(fp == NULL) { printf("文件打开失败,没有此文件或者文件受损!\n"); exit(0); } printf("文件打开成功,内容如下:\n"); ch = fgetc(fp); while(!feof(fp)) // ch != EOF { putchar(ch); ch = fgetc(fp); } printf("\n"); fclose(fp); // 读取完毕,一定要关闭文件 /* fgetc 函数每次只能读取一个字符 */}//***** 写入文件 *****void test4(){ FILE *fp; char ch; char fileName[20]; printf("请输入文件名及其路径:"); scanf("%s",fileName); fp = fopen(fileName,"w"); // "w"指明是以"只读"方式打开文件 if(fp == NULL) { printf("文件打开失败,没有此文件或者文件受损!\n"); exit(0); } printf("文件打开成功,开始写入:\n"); ch = getchar(); while(!feof(fp)) // ch != EOF { fputc(ch,fp); ch = getchar(); } printf("\n"); fclose(fp); // 写入完毕,一定要关闭文件}//***** 一次性读取多个字符 *****void test5(){ FILE *fp; char ch[4097]; char fileName[20]; printf("请输入文件名及其路径:"); scanf("%s",fileName); fp = fopen(fileName,"r"); if(fp == NULL) { printf("文件打开失败,没有此文件或者文件受损!\n"); exit(0); } printf("文件打开成功,读取如下:\n"); fgets(ch,sizeof(ch),fp); puts(ch); fclose(fp); /* fgets 函数可以一次读取多个字符 fgets 函数从fp指向的文件中读取sizeof(ch)-1个字符,即4096个字符,然后在最后添加一个'\0'字符,使其成为一个字符串 */}//***** 一次性读取全部字符 *****void test6(){ FILE *fp; char ch[4097]; char fileName[20]; printf("请输入文件名及其路径:"); scanf("%s",fileName); fp = fopen(fileName,"r"); if(fp == NULL) { printf("文件打开失败,没有此文件或者文件受损!\n"); exit(0); } printf("文件打开成功,读取如下:\n"); while(fgets(ch,sizeof(ch),fp)) { puts(ch); } fclose(fp);}//***** 一次性写入一个字符串 *****void test7(){ FILE *fp; char fileName[20]; printf("请输入文件名及其路径:"); scanf("%s",fileName); fp = fopen(fileName,"w"); if(fp == NULL) { printf("文件打开失败,没有此文件或者文件受损!\n"); exit(0); } printf("文件打开成功,开始写入:\n"); fputs("Hello World!",fp); fclose(fp); printf("写入成功,关闭文件!\n");}//***** 格式化写入字符fprintf *****void test8(){ FILE *fp; char ch; char fileName[20]; printf("请输入文件名及其路径:"); gets(fileName); fp = fopen(fileName,"w"); if(fp == NULL) { printf("文件打开失败,没有此文件或者文件受损!\n"); exit(0); } printf("文件打开成功,请输入一个字符:"); scanf("%c",&ch); fprintf(fp,"%d",ch); fclose(fp);}//***** 格式化读取字符fscanf *****void test9(){ FILE *fp; char ch; char fileName[20]; printf("请输入文件名及其路径:"); scanf("%s",fileName); fp = fopen(fileName,"r"); if(fp == NULL) { printf("文件打开失败,没有此文件或者文件受损!\n"); exit(0); } fscanf(fp,"%d",&ch); printf("读取的字符为:%c\n",ch); fclose(fp);}//***** 成块写入文件 *****void test10(){ FILE *fp; char ch; char fileName[20]; int price[6] = {10,11,12,13,14,15}; int n; printf("请输入文件名及其路径:"); scanf("%s",fileName); fp = fopen(fileName,"w"); if(fp == NULL) { printf("文件打开失败,没有此文件或者文件受损!\n"); exit(0); } n = fwrite(price,sizeof(price),1,fp); if(n != 1) { printf("文件写入出错!\n"); exit(0); } printf("写入完毕!\n"); fclose(fp);}//***** 成块读取文件 *****void test11(){ FILE *fp; char ch; char fileName[20]; int price[6] = {0}; int n; printf("请输入文件名及其路径:"); gets(fileName); fp = fopen(fileName,"r"); if(fp == NULL) { printf("文件打开失败,没有此文件或者文件受损!\n"); exit(0); } n = fread(price,sizeof(price),1,fp); if(n != 1) { printf("文件读取出错!\n"); exit(0); } printf("读取完毕!n:%d\n",n); for(int i = 0; i < 6; i ++) { printf("%d\t",price[i]); } printf("\n"); fclose(fp);}//***** 结构体读写文件 *****#define N 3 struct drug // 药品 { int num; // 编号 char name[20]; // 名称 float price; // 价格 }; struct drug w[N]; struct drug r[N];//***** 结构体写入文件 *****void Save(){ FILE *fp; char fileName[20]; int n; printf("请输入文件名及其路径:"); gets(fileName); fp = fopen(fileName,"w"); if(fp == NULL) { printf("文件打开失败,没有此文件或者文件受损!\n"); exit(0); } for(int i = 0; i < N; i ++) { printf("请输入第%d个药品的编号:",i + 1); scanf("%d",&w[i].num); printf("请输入第%d个药品的名称:",i + 1); scanf("%s",w[i].name); printf("请输入第%d个药品的单价:",i + 1); scanf("%f",&w[i].price); } printf("开始往cxm.dat文件中写入数据...\n"); for(int i = 0; i < N; i ++) { n = fwrite(&w[i],sizeof(struct drug),1,fp); if(n != 1) { printf("文件写入出错!\n"); exit(0); } } printf("写入完毕!\n"); fclose(fp);}//***** 结构体读取文件 *****void Load(){ FILE *fp; char fileName[20]; int n; printf("请输入文件名及其路径:"); gets(fileName); fp = fopen(fileName,"r"); if(fp == NULL) { printf("文件打开失败,没有此文件或者文件受损!\n"); exit(0); } printf("文件cxm.dat打开成功,内容如下:\n"); for(int i = 0; i < N; i ++) { n = fread(&r[i],sizeof(struct drug),1,fp); if(n != 1) { printf("文件读取出错!\n"); exit(0); } } printf("%s\t\t%s\t\t%s\n","编号","名称","价格"); for(int i = 0; i < N; i ++) { printf("%03d\t\t%s\t\t%.2f\n",r[i].num,r[i].name,r[i].price); } fclose(fp);}
#include <iostream>#include <stdlib.h>#include <stdio.h>#include <conio.h>using namespace std;void test1(){// 文件打开方式// "r"(只读) 打开一个文本文件,只允许读数据,文件不存在则打开失败// "w"(只写) 打开一个文本文件,只允许写数据,文件不存在则创建,存在则删除后再创建// "a"(追加) 向文本文件尾部追加数据,文件不存在则创建,存在则追加// "rb"(只读) 打开一个二进制文件,只允许读数据,文件不存在则打开失败// "wb"(只写) 打开一个二进制文件,只允许写数据,文件不存在则创建,存在则删除后再创建// "ab"(追加) 向二进制文件尾部追加数据,文件不存在则创建,存在则追加// "r+"(读写) 打开一个文本文件,允许读和写,文件不存在则打开失败// "w+"(读写) 打开一个文本文件,允许读和写,文件不存在则创建,存在则删除后再创建// "a+"(读写) 打开一个文本文件,允许读和写,文件不存在则创建,存在则追加// "rb+"(读写) 打开一个二进制文件,允许读和写,文件不存在则打开失败// "wb+"(读写) 打开一个二进制文件,允许读和写,文件不存在则创建,存在则删除后再创建// "ab+"(读写) 打开一个二进制文件,允许读和写,文件不存在则创建,存在则追加}void test2(){// 权限不够,打印出错误信息FILE *fp = NULL;char fileName[20] = "D:\\cxm.txt";fp = fopen(fileName, "w");if (fp == NULL){perror("文件打开失败,错误原因");exit(0);}fputs("Hello World!", fp);fclose(fp);}void test3(){// 读取出错,打印出错误信息FILE *fp = NULL;char fileName[20] = "D:\\cxm.txt";fp = fopen(fileName, "r");if (fp == NULL){perror("文件打开失败,错误原因");exit(0);}printf("文件读取成功\n");rewind(fp);if (fputs("Hello World!", fp) == EOF){if (feof(fp)){printf("写到文件尾!\n");clearerr(fp);}else if (ferror(fp)){printf("写文件出错!\n");clearerr(fp);}}fclose(fp);}void test4(){// 文件改名char oldName[20] = "D:\\cxm.txt";char newName[20] = "D:\\test\\zqr.txt";if (rename(oldName, newName) == 0){printf("改名成功!\n");}else{perror("改名失败, 失败原因");}}void test5(){// 文件删除char oldName[20] = "D:\\test\\zqr.txt";if (remove(oldName) == 0){printf("删除成功!\n");}else{perror("删除失败,失败原因");}}void test6(){// 创建目录(Windows平台和Linux平台)char name[20], cmd[80];printf("请输入要创建的目录名及其路径:\n");gets(name);#ifdef WIN32sprintf(cmd, "md %s", name); // Windows#elsesprintf(cmd, "mkdir %s", name); // Linux#endifprintf("cmd:%s\n", cmd);system(cmd);}void test7(){// 删除目录(Windows平台和Linux平台)char name[20], cmd[80];printf("请输入要删除的目录的名称:\n");gets(name);#ifdef WIN32sprintf(cmd, "rd /s /q %s", name); // Windows#elsesprintf(cmd, "rm -rf %s", name); // Linux#endifsystem(cmd);}int main(int argc, const char *argv[]){test7();return 0;}
0 0
- C语言_文件
- C语言_文件的操作
- Objective-c语言_文件基本操作
- OBjective-c语言_文件管理
- C语言之_双重指针、多文件、include、文件
- C语言文件的输入输出_学生的信息
- iOS C语言6.2_函数多文件管理
- iOS C语言7.2_结构体多文件
- C语言_文件操作_FILE结构体
- 20161216C语言基础19_文件处理函数
- C语言_数组
- C语言_函数
- C语言_数组
- C语言_变量
- C语言_指针
- C语言_链表
- C语言_数组
- C语言_函数
- hdoj 5037 Frog 【万恶的贪心】
- DAMAGE:After normal block(#****)
- java中的IO整理
- C#开发OCX控件之开发
- 关于s:iterator中"value" does not support runtime expressions的解决方法
- C语言_文件
- 拦截webview上的请求,进行一系列操作
- 小爬虫之博客刷博器
- 再搬家。。。
- qt关于一些托盘,任务栏图标隐藏,无边框等的一些窗口的效果
- 图像分割
- iOS error APPLE LLVM 5.1 Error UIKit.pcm was built
- Appium和Robotium在文字输入上的区别
- php中几个简单的例子