C语言文件读写学习
C语言文件读取与写入是通过将文件看成一个字符序列进行读入和写出的。所以读取与写入文件就用到了指针,而这个指针是一个特殊的指针,称为文件指针。
指针名称是:FILE
FILE *fileptr;//文件必须用FILE *ptr指针
对文件指针的文件进行打开操作的函数时fopen/fopen_s
函数简介
函数原型:FILE * fopen(const char * path,const char * mode);
返回值:文件顺利打开后, 指向该流的 文件指针就会被返回。如果文件打开失败则返回NULL,并把 错误代码存在 errno中。
一般而言,打开文件后会做一些文件读取或写入的动作,若打开文件失败,接下来的读写动作也无法顺利进行,所以一般在fopen()后作错误判断及处理。
//有些地方fopen会unsafe,需要学习下fopen_s的用法
errno_t err = fopen_s(&fileptr,"file.txt", "w+");
/*
errno_t err 定义一个err的返回值 errno_t是int的别名 整形变量,返回1(失败)或者0(成功)
*/
if(err == 1)
{
exit(1);//exit()内只要不为0都为异常退出
}
/*
code
*/
//同时有fopen就有fclose,
fclose(fileptr);
open和close之间就是我们做文件处理的区段
文件处理实操及举例:
平常用的Debugcsv写入
void FileDealDebug(int debuginfo)
{
FILE *ptrDebug;
char *DebugFileName = "Debug_info.csv";
ptrDebug = malloc(sizeof(DebugFileName));//malloc申请内存区
errno_t err_debug = fopen_s(&ptrDebug, DebugFileName, "a");//"w" 写入方式(覆写) "r"只读 "a"写入(追加)
Checkfileerror(err_debug);
fprintf_s(ptrDebug,"%#.2X,\n",debuginfo);//16进制请用%x 如果想用0x的16进制,用%#X
fclose(ptrDebug);
}
1.文件名修改及拼接
不同的信息有不同的对应文件名,每次手动改会很麻烦,就想着能不能自动生成想要的文件名
字符串的拼接
strcat_s()
这个函数不知道为什么总出错,暂时不用它了....
sprintf_s()
定义:
sprintf_s(
_Out_writes_(_BufferCount) _Always_(_Post_z_) char* const _Buffer,
_In_ size_t const _BufferCount,
_In_z_ _Printf_format_string_ char const* const _Format,
...)
这两个函数可以实现这个功能,具体用法如下
char *FileNameDeal(char *filename, char *keywords)
{
char *filenameOutput;
char *suffix = ".csv";
/*空间*/
filenameOutput = (char *)malloc(strlen(filename)+strlen(keywords)+strlen(suffix)+1);//sizeof异常,输出为4,推测输出为char 的size了
sprintf_s(filenameOutput,strlen(filename)+strlen(keywords)+strlen(suffix)+1,"%s%s%s",filename,keywords,suffix);//拼接字符串尝试
return filenameOutput;
}
调用后能正常输出想要的拼接后的字符串