写文件的函数
//创建文件函数:指定文件的路径和文件的内容进行创建
void WriteFile(char * FilePath, char * FileContent) {
//创建一个文件指针,并赋值位NULL
FILE * pFile = NULL;
pFile = fopen(FilePath, "w");//以写模式打开文件
if (pFile == NULL) {
printf("open file failed!");
fclose(pFile);//关闭文件
exit(0);
}
fwrite(FileContent, (strlen(FileContent) + 1) * sizeof(char), 1, pFile);//写入内容
fclose(pFile);
}
int main()
{
WriteFile("Hello.txt", "12345");//在当前文件夹中创建Hello.txt文件,文件内容为12345
return 0;
}
文件会被创建在当前程序源码同级目录中
但是在打开文件后发现文件内容呈乱码情况,这个时候可以在打开文件的时候可以指定文件的编码格式。
指定创建的文件路径;并选择文件编码格式为UTF-8,就可以正常显示文件内容。
读文件函数
读取整个文件的内容
char * ReadFile(char * szFilePath) {
FILE * pFile;
char * szReadBuffer = NULL;
int nReadFileSize = 0;
if ((pFile = fopen(szFilePath, "r")) == NULL) { //先赋值后判断(pFile = fopen();接着判断pFile是否为Null
printf("open file failed!");
fclose(pFile);
exit(0);
}
fseek(pFile, 0, SEEK_END); //调整文件指针的位置(SEEK_END--文件末尾)
nReadFileSize = ftell(pFile); //返回文件内容长度
rewind(pFile); //将文件指针重置到文件头
szReadBuffer = (char *)malloc(sizeof(char) * nReadFileSize);
if (szFilePath == NULL) {
printf("malloc failed!");
fclose(pFile);
exit(0);
}
memset(szReadBuffer, 0, nReadFileSize); //将申请到的内存空间内存值置0
int nFileLength = fread(szReadBuffer, 1, nReadFileSize, pFile); //读取文件内容
if (nFileLength != nReadFileSize) {
printf("Read File failed!");
fclose(pFile);
exit(0);
}
return szReadBuffer;
}
这段代码定义了一个函数 ReadFile
,其作用是从指定的文件路径读取文件内容,并返回一个指向读取内容的字符串指针。
让我们逐行解释代码:
char * ReadFile(char * szFilePath) {
: 定义了一个函数ReadFile
,该函数接受一个字符串参数szFilePath
,表示要读取的文件路径,并返回一个指向字符的指针。FILE * pFile;
: 声明了一个FILE
类型的指针变量pFile
,用于操作文件。char * szReadBuffer = NULL;
: 声明了一个字符指针变量szReadBuffer
,用于存储读取的文件内容,并初始化为NULL
。int nReadFileSize = 0;
: 声明了一个整型变量nReadFileSize
,用于存储文件的大小,并初始化为0
。if ((pFile = fopen(szFilePath, "r")) == NULL) { ... }
: 使用fopen
函数打开文件,模式为只读模式"r"
。如果打开文件失败(即返回的指针为NULL
),则输出错误信息,关闭文件并退出程序。fseek(pFile, 0, SEEK_END);
: 将文件指针移动到文件末尾,以便获取文件的大小。nReadFileSize = ftell(pFile);
: 获取文件指针当前位置,即文件的大小。rewind(pFile);
: 将文件指针重新定位到文件开头,以便读取文件内容。szReadBuffer = (char *)malloc(sizeof(char) * nReadFileSize);
: 使用malloc
函数动态分配内存空间,大小为文件大小加一(为了存储字符串结束符\0
),并将指针赋值给szReadBuffer
。if (szFilePath == NULL) { ... }
: 检查内存分配是否成功。这里应该是检查szReadBuffer
是否为NULL
,而不是szFilePath
,因为szFilePath
在这里是函数的参数,而不是动态分配的内存。memset(szReadBuffer, 0, nReadFileSize);
: 使用memset
函数将动态分配的内存空间初始化为零。int nFileLength = fread(szReadBuffer, 1, nReadFileSize, pFile);
: 使用fread
函数从文件中读取内容到szReadBuffer
中,每次读取一个字节,共读取nReadFileSize
个字节。if (nFileLength != nReadFileSize) { ... }
: 检查实际读取的文件长度是否与预期的文件长度相同。如果不相同,则输出错误信息,关闭文件并退出程序。return szReadBuffer;
:返回读取的文件内容所在的字符指针szReadBuffer
。
最后,记得在使用完返回的字符串后,调用 free(szReadBuffer)
来释放动态分配的内存空间,以免造成内存泄漏。
异或加密函数
void xorcode(char * szBuffer, int nSize, char Key) {
for (size_t i = 0; i < nSize; i++)
{
szBuffer[i] ^= Key;
}
}
这段代码定义了一个名为 xorcode
的函数,其作用是对给定的缓冲区 szBuffer
中的数据进行异或加密操作。
让我们逐行解释代码: