📄 main.c
字号:
#include <windows.h>
#include <wchar.h>
#include <stdio.h>
#include <stdlib.h>
#define MAX_LEN 512
#define READIN_FILE "readin.txt"
#define OUTFILE "xefs.dat"
typedef struct _RULE {
ULONG Policy;
WCHAR Pattern[MAX_LEN];
} RULE, *PRULE;
RULE gRule;
BOOLEAN IsFileExist(char *filename);//检查文件是否存在
BOOLEAN CheckReadinFile(char *filename);//检查读入的文件。合法的文件第一行是Policy,第二行是Pattern
int main()
{
FILE *pReadinFile;
FILE *pOutFile;
WCHAR wbuffer[MAX_LEN];
ULONG Policy; //读出的策略
ULONG ByteWritten = 0; //已经写了的字节数
ULONG ByteWrittenSum = 0;//前面数据的和,用来校验
ULONG i, len;
PULONG Data;
system("cls");
if(!IsFileExist(READIN_FILE))
{
printf("文件%s不存在!\n", READIN_FILE);
exit(1);
}
if (!CheckReadinFile(READIN_FILE))
{
printf("文件%s不符合格式要求:第一行Policy;第二行Pattern\n", READIN_FILE);
exit(1);
}
pReadinFile = fopen("readin.txt", "r");
pOutFile = fopen("xefs.dat", "w");
fscanf(pReadinFile, "%d", &Policy);//读第一行
fwrite(&Policy, sizeof(ULONG), 1, pOutFile);//写头4个字节(Policy)
ByteWritten += sizeof(ULONG); //此时写了几个字节
ByteWrittenSum += Policy; //累加校验和
fscanf(pReadinFile, "%S", &wbuffer);//读第二行
len = wcslen(wbuffer); //读出的长度(按WCHAR算)
fwrite(wbuffer, sizeof(WCHAR), len, pOutFile);//将读出的Pattern按WCHAR写进文件
ByteWritten += len * sizeof(WCHAR); //写了多少个字节
Data = (PULONG)wbuffer;
for(i = 0; i < len / sizeof(WCHAR); i++) //这里循环条件按ULONG算,sizeof(ULONG) = sizeof(WCHAR) * 2
ByteWrittenSum += Data[i]; //累加校验和
//将剩余部分写空
memset(wbuffer, 0, MAX_LEN * sizeof(WCHAR));
fwrite(wbuffer, sizeof(WCHAR), (sizeof(RULE) - ByteWritten) / sizeof(WCHAR), pOutFile);
//最后4个字节写CRC校验和
fwrite(&ByteWrittenSum, sizeof(ULONG), 1, pOutFile);
fclose(pReadinFile);
fclose(pOutFile);
return 0;
}
BOOLEAN IsFileExist(char *filename)
{
FILE *fp;
fp = fopen(filename, "r");
if (fp)
{
fclose(fp);
return TRUE;
}
return FALSE;
}
BOOLEAN CheckReadinFile(char *filename)
{
FILE *fp;
ULONG linenum = 0;
CHAR buf[MAX_LEN * 2];
fp = fopen(filename, "r");
while (fscanf(fp, "%s", buf) > 0) {
linenum ++;
}
fclose(fp);
if(linenum != 2)
return FALSE;
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -