⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 关于tooflat透明过滤驱动研究个图片管理程序
💻 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 + -