一、补充(标准IO端口命令)
(1)fputs和fgets
fgetc和fgets在复制中的区别:
#include "software.h"
#include <stdio.h>
/***************************************************
* 函数名:CopyAsciiFileContent
* 功 能:
* 将srcfile中的文件内容拷贝到dstfile文件中
* 参 数:
* dstfile:目的文件的文件路径
* srcfile:源文件的文件路径
* 返回值:
* 成功返回0
* 失败返回-1
* 注意事项:
* 1.该函数只能拷贝ASCII普通文件内容
**************************************************/
int CopyAsciiFileContent(const char *dstfile, const char *srcfile)
{
FILE *fsrc = NULL;
FILE *fdst = NULL;
int temp = 0;
fsrc = fopen(srcfile, "r");
if (NULL == fsrc)
{
goto err2;
}
fdst = fopen(dstfile, "w");
if (NULL == fdst)
{
goto err1;
}
while (1)
{
temp = fgetc(fsrc);
if (EOF == temp)
{
break;
}
fputc(temp, fdst);
}
fclose(fsrc);
fclose(fdst);
return 0;
err1:
fclose(fsrc);
err2:
return -1;
}
/***************************************************
* 函数名:CopyAsciiFileContent2
* 功 能:
* 将srcfile中的文件内容拷贝到dstfile文件中
* 参 数:
* dstfile:目的文件的文件路径
* srcfile:源文件的文件路径
* 返回值:
* 成功返回0
* 失败返回-1
* 注意事项:
* 1.该函数只能拷贝ASCII普通文件内容
**************************************************/
int CopyAsciiFileContent2(const char *dstfile, const char *srcfile)
{
FILE *fsrc = NULL;
FILE *fdst = NULL;
char tmpbuff[4096] = {0};
char *pret = NULL;
fsrc = fopen(srcfile, "r");
if (NULL == fsrc)
{
goto err1;
}
fdst = fopen(dstfile, "w");
if (NULL == fdst)
{
goto err2;
}
while (1)
{
pret = fgets(tmpbuff, sizeof(tmpbuff), fsrc);
if (NULL == pret)
{
break;
}
fputs(tmpbuff, fdst);
}
fclose(fsrc);
fclose(fdst);
return 0;
err2:
fclose(fsrc);
err1:
return -1;
}
注意:
puts(tmpbuff);
fputs(tmpbuff, stdout);
puts会多打印一个\n字符
gets(tmpbuff);
fgets(tmpbuff, sizeof(tmpbuff), stdin);
gets会去掉用户输入\n字符
fgets不会去掉用户输入的\n字符 (而且两者的传输速率也不相同fputs较快)
(2)fprintf、fscanf
(3)fwrite、fread
ASCII码文件是一种特殊的二进制文件:
比如:2024
ASCII码文件: '2' '0' '2' '4' 代码、文本文件
00110010 00110000 00110010 00110100
二进制文件: 2024 视频、图片、压缩包等
0000 0000 0000 0000 0000 0111 1110 1000