重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
//要另外说下如fprintf(stderr, "Can't open %s\n", file_app);这是向文件或者系统设备输出的函数;但他的文件指针为stderr;这是c中的标准错误输出设备指针,系统自动分配为显示器故相当于printf("Can't open %s\n", file_app);
郊区网站制作公司哪家好,找成都创新互联公司!从网页设计、网站建设、微信开发、APP开发、响应式网站等网站项目制作,到程序开发,运营维护。成都创新互联公司从2013年开始到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联公司。
#include stdio.h
#include stdlib.h
#include string.h
#define BUFSIZE 1024
#define SLEN 81
void append(FILE *source, FILE *dest);
int main(void)
{
FILE *fa, *fs; //定义2个文件类型指针
int files = 0; // 追加文件个数
char file_app[SLEN];
char file_src[SLEN]; // 2个字符串用来储存文件名;
puts("Enter name of destination file:");//输出Enter name of destination file:
gets(file_app);//输入要追加的文件名
if ((fa = fopen(file_app, "a")) == NULL)//fa指向追加的目的文件,以追加方式打开文件,如果打开失败退出;
{
fprintf(stderr, "Can't open %s\n", file_app);
exit(2);
}
if (setvbuf(fa, NULL, _IOFBF, BUFSIZE) != 0)//创建缓冲器与流相关,大小为BUFSIZE,作用是提高IO速度;如果打开失败退出
{
fputs("Can't create output buffer\n", stderr);
exit(3);
}
puts("Enter name of first source file (empty line to quit):");//输出Enter name of first source file (empty line to quit):
while (gets(file_src) file_src[0] != '\0')//输入源文件如果是空串结束循环
{
if (strcmp(file_src, file_app) == 0)//如果源和追加文件相同
fputs("Can't append file to itself\n",stderr);
else if ((fs = fopen(file_src, "r")) == NULL)//如果打开源文件失败
fprintf(stderr, "Can't open %s\n", file_src);
else
{
if (setvbuf(fs, NULL, _IOFBF, BUFSIZE) != 0)//创建缓冲器与流相关,大小为BUFSIZE,作用是提高IO速度;如果打开失败开始下次循环
{
fputs("Can't create input buffer\n",stderr);
continue;
}
append(fs, fa);//函数
if (ferror(fs) != 0)//检查文件操作是否有错
fprintf(stderr,"Error in reading file %s.\n",
file_src);
if (ferror(fa) != 0)
fprintf(stderr,"Error in writing file %s.\n",
file_app);
fclose(fs);//关闭源文件
files++;//追加文件数+1
printf("File %s appended.\n", file_src);
puts("Next file (empty line to quit):");
}
}
printf("Done. %d files appended.\n", files);
fclose(fa);//关闭追加文件
return 0;
}
void append(FILE *source, FILE *dest)
{
size_t bytes;
static char temp[BUFSIZE];
while ((bytes = fread(temp,sizeof(char),BUFSIZE,source)) 0)//把源文件的内容追加到追加文件,块大小sizeof(char),块数为BUFSIZE
fwrite(temp, sizeof (char), bytes, dest);//写文件块大小sizeof(char),块数为BUFSIZE
}
#include iostream
#include fstream
using namespace std;
void main()
{
ifstream fin("c:\\qq.txt");
char name[2][10];
char age[2][10];
char leibie[2][20];
int i=0;
while (!fin.eof())
{
fin.getline(name[i],10,' ');
fin.getline(age[i],10,' ');
fin.getline(leibie[i],10);
coutname[i]'\t'age[i]'\t'leibie[i]endl;
i++;
}
if (strcmp(leibie[0],"实习学生")==0)
{
strcpy(leibie[0],"正式员工");
}
ofstream fout("c:\\qq.txt");
for (i=0;i2;i++)
{
foutname[i]' 'age[i]' 'leibie[i]endl;
}
}
标准函数是:fopen、fread、fwrite、fclose等函数;
当然fprintf和fscanf函数也可以进行文件的读写;
有问题,请追问;
write()写文件函数
原形:int
write(int
handle,char
*buf,unsigned
len)
用法:write(文件句柄,缓冲区地址,缓冲区字节长度最大65534);
功能:将缓冲区的数据写入与handle相联的文件或设备中,handle是从creat、open、dup或dup2调用中得到的文件句柄。对于磁盘或磁盘文件,写操作从当前文件指针处开始,对于用O_APPEND选项打开的文件,写数据之前,文件指针指向EOF;对于设备,字节被直接传送到设备中;
返回值:实际写入的字节数(不包括回车符),出错时返回-1。
头文件:io.h
void save(){ /*建立保存文件函数*/
int i;
FILE *fp; /*定义文件型指针*/
system("CLS");
if((fp=fopen("student.txt","wb"))==NULL){ /*打开输出文件*/
printf("不能打开文件!\n");
return; /*终止程序*/
}
for(i=0;in;i++) /*向student文件中写入信息*/ // 这是所谓的上边
if(fwrite(stu[i],sizeof(struct student),1,fp)!=1) // 这里写文件上边有写
// fwrite() 这个函数 写文件 // 你可以百度 fwrite( ) 百科里有介绍
printf("文件写入错误\n");
fclose(fp); /*关闭文件*/
printf("\n\n\n\n\t\t\t学生信息保存成功!\n");
printf("\n\n\n\n\t\t\t按任意键返回菜单!!");
getch();
}
很简单
因为没有关闭文件指针fp
写完后会自动后移
不信你可以在第一次
fwrite
后关闭文件指针
再打开
再fwrite试试
此时fp指针就又指向文件开头了
所有关于文件指针操作的函数都是这样的
不是因为wb
wb
是
write
byte
二进制写入的意思
先操作fwrite时
是写入内存的
fclose时才写入文件的