您的位置:首页 > 其它

C经典 文件的操作

2016-05-09 20:53 260 查看
一、常用函数



二、文件指针,指向文件的指针

FILE *fp;

三、文件的打开与关闭

FILE *fp = fopen(文件名,使用文件方式)

如:FILE *fp = NULL;

fp = fopen(” file.txt”,”r”);//r 表示读文件

int result = fclose(fp) ;// =0,如果不等于0,表示发生错误

四、读写方式



五、补充:

\0 :表示字符串结束

\n :表示回车换行

EOF :表示文件的末尾

六、关于中文读取

因为一个汉字占三个字节,一个字节等于8位

在C语言里每个字符串结束时都以\0

所以在读取的时候不能只读三个,会乱码

FILE *fp = fopen(“a.txt”,”r”);

//a.txt里存放的是中文

错误代码如:

char ch[3] ;
fgets(ch,3, fp);
printf("%s\n",ch);


正确代码如:

char ch[4] ;
fgets(ch,4, fp);
printf("%s\n",ch);


七、示例代码1

#include <stdio.h>
#include <string.h>
int main(int argc, const char * argv[])
{
//定义文件指针
FILE *fw = NULL;
fw = fopen("a.txt", "w");
char ch[7] = "abcdefg";
if (fw != NULL) {
//写入
for(int i = 0 ; i <strlen(ch); i ++ ){
printf("%c\t",ch[i]);
fputc(ch[i], fw);
}

}else{
printf("写入失败!");
getchar();
exit(1);
}

printf("\n");
FILE *fr = NULL;
fr = fopen("a.txt", "r");
if(fr != NULL){
char c = fgetc(fr);
//读取
while(c != EOF){
putchar(c);
c = fgetc(fr);
}
}else{
printf("读取失败!");
getchar();
exit(1);

}

//fclose(fw);
//fclose(fr);

printf("\n");
return 0;
}


七、示例代码2

#include <stdio.h>
#include <string.h>
int main(int argc, const char * argv[])
{
//定义文件指针
FILE *fp = NULL;
fp = fopen("a.txt", "a+");
if (fp != NULL) {
//写入
printf("请输入字符");
char ch = getchar();
int count = 0;
while(ch !='\n'){
count ++;
fputc(ch,fp);
ch = getchar();
}
fclose(fp);
printf("\n");
//把指针移到开始位置
rewind(fp);
//读取数据
ch = fgets(fp);
while(ch != EOF){
putchar(ch);
ch = fgets(fp);
}
}else{
printf("写入失败!");
getchar();
exit(1);
}

printf("\n");
return 0;
}


八、fread与fwrite函数

1)fread(buffer,size,count,fp);

2)fwrite(buffer,size,count,fp):



示例代码:

fwrite写入数据

FILE *fp =fopen("a.txt","wb");
if(fp !=NULL){
char *ch = "kkkkkkk\n";
fwrite(ch,1,strlen(ch),fp);
fwrite(ch,1,strlen(ch),fp);
}else{
printf("写入失败!");
getchar();
exit(1);
}
fclose(fp);


fread读取数据

FILE *fp =fopen("a.txt","rb");
if(fp !=NULL){
char ch[100];
fread(ch,1,sizeof(ch),fp);
printf("%s\n",ch);
}else{
printf("写入失败!");
getchar();
exit(1);
}
fclose(fp);


九、结构体的读写

#include <stdio.h>
struct Student{
char name[20];
int age;
float score;
};
int main(int argc, const char * argv[])
{

// 定义数组
struct Student stu[3] ={{"tom",22,89},{"kite",34,67},{"jelly",21,90}};
FILE *fp = fopen("stu.data", "wb+");
if(fp !=NULL){
for(int i =0; i < 3; i++){
fwrite(&stu[i],sizeof(struct Student),1,fp);

}
printf("写入成功!\n");

rewind(fp);
struct Student s[3];
for(int i = 0; i < 3; i++){
fread(&s[i],sizeof(struct Student),1,fp);
printf("%s\t",s[i].name);
}
}

fclose(fp);
printf("\n\n");
return 0;
}


十、fscanf和fprintf的用法



示例1

#include <stdio.h>

int main(int argc, const char * argv[])
{

// 写入 9##2;到文件 test.txt
int a = 9;
int b = 2;
FILE *fp = fopen("text.txt","w+");
if(fp != NULL){
fprintf(fp, "%d##%d;", a,b);

rewind(fp);
int m=0;
int n=0;
fscanf(fp, "%d##%d;",&m,&n);
printf("m=%d,n=%d",m,n);
}

printf("\n");
return 0;
}


示例2

#include <stdio.h>
/**
读写如下文件
1,2#
3,4#
5,6#
*/
int main(int argc, const char * argv[])
{

// 定义数组
char ch[3][2] = {1,2,3,4,5,6};
//定义指针
FILE *fp = fopen("a.txt", "w+");
//
if (fp!=NULL) {
//写入
for (int i = 0; i <3; i ++) {
fprintf(fp, "%d,%d#",ch[i][0],ch[i][1]);
}
printf("写入成功\n");

rewind(fp);
//读取
int arr[3][2];
for (int i = 0; i <3; i ++) {
fscanf(fp, "%d,%d#",&arr[i][0],&arr[i][1]);
printf("%d,%d",arr[i][0],arr[i][1]);
}
}
fclose(fp);

return 0;
}


十一、文件随机读取,定位fseek

fseek(fp,curPosition,headPosition);

如:fseek(fp,100L,0);

文件首:SEEK_SET 0

当前位置:SEEK_CUR 1

文件尾部:SEEK_END 2

示例:读取第二个学生的成绩

#include <stdio.h>
struct Student{
char name[20];
int age;
float score;
};
int main(int argc, const char * argv[])
{

// 定义数组
struct Student stu[3] ={{"tom",22,89},{"kite",34,67},{"jelly",21,90}};
FILE *fp = fopen("stu.data", "wb+");
if(fp !=NULL){
for(int i =0; i < 3; i++){
fwrite(&stu[i],sizeof(struct Student),1,fp);

}
printf("写入成功!\n");

//定位到第二个学生
fseek(fp,sizeof(struct Student),SEEK_SET);

fread(&stu,sizeof(struct Student),1,fp);
printf("%s\t",stu.name);
}
}

fclose(fp);
printf("\n\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: