//第一个:怎么指定导出一个信息,比如只导出陈文这一个信息
void save_name(char *name)
{
if(name == NULL)
{
printf("参数为空\n")
exit(1)
}
char college[128] = {0}
FILE *fp
if((fp = fopen("C:\\Users\\AI\Desktop\\未来就在眼前.xls", "wb")) == NULL)
{
printf("无法打开文件\n")
exit(1)
}
sprintf(college, "%s\n", name)
fprintf(fp, "%s", college)
fclose(fp)
}
//第二个:怎么指定的导出一整行的信息,比如导出第2行的,
void save_line(int line)
{
if(line < 0 || line >= N)
{
printf("参数行号不正确\n")
exit(1)
}
char college[128] = {0}
FILE *fp
if((fp = fopen("C:\\Users\\AI\Desktop\\未来就在眼前.xls", "wb")) == NULL)
{
printf("无法打开文件\n")
exit(1)
}
sprintf(college, "%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n", message[line].province, message[line].name, message[line].sex,
message[line].age, message[line].nation, message[line].school, message[line].student_id)
fprintf(fp, "%s", college)
fclose(fp)
}
//第三个:怎么通过确定陈文这个信息从而导出一整行的信息。
void save_match(char *name)
{
if(name == NULL)
{
printf("参数为空\n")
exit(1)
}
char college[128] = {0}
FILE *fp
int i
if((fp = fopen("C:\\Users\\AI\Desktop\\未来就在眼前.xls", "wb")) == NULL)
{
printf("无法打开文件\n")
exit(1)
}
for(i = 0 i < N i++)
{
if(strcmp(message[i].name, name) == 0) // 比较姓名是否相同
{
sprintf(college, "%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n", message[i].province, message[i].name, message[i].sex,
message[i].age, message[i].nation, message[i].school, message[i].student_id)
fprintf(fp, "%s", college)
break
}
}
fclose(fp)
}
c语言文件类型指针是通过file*fp
这种形式进行定义的。
关于file结构在vc6中有如下定义:
#ifndef _file_defined
struct _iobuf {
char *_ptr//文件输入的下一个位置
int _cnt//当前缓冲区的相对位置
char *_base//指基础位置(即是文件的起始位置)
int _flag//文件标志
int _file//文件描述符id
int _charbuf//检查缓冲区状况,如果无缓冲区则不读取
int _bufsiz//文件缓冲区大小
char *_tmpfname//临时文件名
}
typedef struct _iobuf file
#define _file_defined
#endifc程序用不同的file结构管理每个文件。程序员可以使用文件,但是不需要知道file结构的细节。实际上,file结构是间接地操作系统的文件控制块(fcb)来实现对文件的操作的,如下图:
上面图中的_file实际上是一个描述符,作为进入打开文件表索引的整数。
文件是存放在物理磁盘上的,包括文件控制块(fcb)和数据块。文件控制块通常包括文件权限、日期(创建、读取、修改)、拥有者、文件大小、数据块信息。数据块用来存储实际的内容。当打开一个文件时,程序会将物理磁盘上的文件数据块读入到内存,然后通过文件指针的移动读取内存中的文件数据。
相关函数:
file
*fopen(
char
*file,
char
*open_mode
)
//打开文件,读文件到内存,返回文件信息结构指针
int
fread(
char
s,
int
size,
int
num,
file
*fp
)
//按字节读取文件内容到s中
int
fwrite(
char
s,
int
size,
int
num,
file
*fp
)
//按字节将s地址中的数据写到文件中
char
*fgets(
char
*s,
int
max_size,
file
*fp)
//读一行数据到缓冲区s中
int fseek(
file
*fp,
long
offset,
int
whence)
//移动文件指针到指定位置
void
rewind(file
*fp)
//回到文件头
long
ftell(file
*fp)
//得到当前文件偏移位置
fclose(fp)
//关闭文件,刷新缓存到物理磁盘上