Setup1

#include <stdio.h>
#include <string.h>
#include <windows.h>

#define TRAGE_FILE "..\\Setup1.vdproj"
#define TMP_FILE "tmp.txt"
#define BUF_SIZE 256



BOOL DeleteSubItem(const char *strItem, 
				   const char *strSubItemName,
				   const char *strSubItemVal)
{
	FILE *pTargeFile;
	FILE *pTmpFile;

	pTargeFile = fopen(TRAGE_FILE, "r+");
	if (pTargeFile == NULL) 
	{ 
        printf("Could not open targe file!\n");
		return FALSE;
	} 

	pTmpFile= fopen(TMP_FILE, "w+");
	if (pTmpFile == INVALID_HANDLE_VALUE) 
	{ 
        printf("Could not create tmp file!\n"); 
		return FALSE;
	} 

	BOOL bFindItem = FALSE;
	char strReadBuf[BUF_SIZE] = {0};
	char strItemID[BUF_SIZE] = {0};
	fpos_t position = 0; // 用于记录subitem的位置

	while (fgets(strReadBuf, BUF_SIZE, pTargeFile))
	{
		// Item块结束
		if (bFindItem && strstr(strReadBuf, "}\n") != NULL)
		{
			fputs(strReadBuf, pTmpFile);
			memset(strReadBuf, 0, BUF_SIZE);
			break;				
		}

		// 找到item
		if (bFindItem)
		{
			// 找到subitem名
			if (strstr(strReadBuf, strSubItemName) != NULL)
			{
				// 找到要删除的subitem
				if (strstr(strReadBuf, strSubItemVal) != NULL)
				{
					while (fgets(strReadBuf, BUF_SIZE, pTargeFile))
					{	
						// 到了subitem块结尾
						if (strstr(strReadBuf, "}\n") != NULL)	
							break;
						memset(strReadBuf, 0, BUF_SIZE);						
					}
					break;
				}
				else
				{
					fsetpos(pTargeFile, &position);  // 回到subitem块头
					
					while (fgets(strReadBuf, BUF_SIZE, pTargeFile))
					{
						fputs(strReadBuf, pTmpFile);
						
						// 到了SubItem块结尾
						if (strstr(strReadBuf, "}\n") != NULL)	
						{
							fgetpos(pTargeFile, &position);
							break;
						}
						memset(strReadBuf, 0, BUF_SIZE);						
					}
				}
			}
			continue;
		}

		// 首先找到item
//		if (strcmp(strReadBuf, strItem) == 0)
		if (strstr(strReadBuf, strItem) != NULL)
		{
			bFindItem = TRUE;            
			fputs(strReadBuf, pTmpFile);   // 跳过strItem与{
			memset(strReadBuf, 0, BUF_SIZE);
			fgets(strReadBuf, BUF_SIZE, pTargeFile);
			fgetpos(pTargeFile, &position);
		}
		
		fputs(strReadBuf, pTmpFile);
		memset(strReadBuf, 0, BUF_SIZE);
	}


	while (fgets(strReadBuf, BUF_SIZE, pTargeFile))
	{
		fputs(strReadBuf, pTmpFile);
		memset(strReadBuf, 0, BUF_SIZE);
	}

	fclose(pTargeFile); 
	fclose(pTmpFile); 

	CopyFile(TMP_FILE, TRAGE_FILE, FALSE);

	DeleteFile(TMP_FILE);

	return TRUE;
} 

BOOL SetSubItemVal(const char *strItem, 
				   const char *strSubItemName,
				   const char *strSubItemVal)
{
	FILE *pTargeFile;
	FILE *pTmpFile;

	pTargeFile = fopen(TRAGE_FILE, "r+");
	if (pTargeFile == NULL) 
	{ 
        printf("Could not open targe file!\n");
		return FALSE;
	} 

	pTmpFile= fopen(TMP_FILE, "w+");
	if (pTmpFile == INVALID_HANDLE_VALUE) 
	{ 
        printf("Could not create tmp file!\n"); 
		return FALSE;
	} 

	BOOL bFindItem = FALSE;
	char strReadBuf[BUF_SIZE] = {0};
	char strItemID[BUF_SIZE] = {0};
	fpos_t position = 0; // 用于记录subitem的位置

	while (fgets(strReadBuf, BUF_SIZE, pTargeFile))
	{
		// Item块结束
		if (bFindItem && strstr(strReadBuf, "}\n") != NULL)
		{
			fputs(strReadBuf, pTmpFile);
			memset(strReadBuf, 0, BUF_SIZE);
			break;				
		}

		// 找到item
		if (bFindItem)
		{
			// 找到subitem名
			if (strstr(strReadBuf, strSubItemName) != NULL)
			{
				// 找到要删除的subitem
				if (strstr(strReadBuf, strSubItemVal) != NULL)
				{
					while (fgets(strReadBuf, BUF_SIZE, pTargeFile))
					{	
						// 到了subitem块结尾
						if (strstr(strReadBuf, "}\n") != NULL)	
							break;
						memset(strReadBuf, 0, BUF_SIZE);						
					}
					break;
				}
				else
				{
					fsetpos(pTargeFile, &position);  // 回到subitem块头
					
					while (fgets(strReadBuf, BUF_SIZE, pTargeFile))
					{
						fputs(strReadBuf, pTmpFile);
						
						// 到了SubItem块结尾
						if (strstr(strReadBuf, "}\n") != NULL)	
						{
							fgetpos(pTargeFile, &position);
							break;
						}
						memset(strReadBuf, 0, BUF_SIZE);						
					}
				}
			}
			continue;
		}

		// 首先找到item
//		if (strcmp(strReadBuf, strItem) == 0)
		if (strstr(strReadBuf, strItem) != NULL)
		{
			bFindItem = TRUE;            
			fputs(strReadBuf, pTmpFile);   // 跳过strItem与{
			memset(strReadBuf, 0, BUF_SIZE);
			fgets(strReadBuf, BUF_SIZE, pTargeFile);
			fgetpos(pTargeFile, &position);
		}
		
		fputs(strReadBuf, pTmpFile);
		memset(strReadBuf, 0, BUF_SIZE);
	}


	while (fgets(strReadBuf, BUF_SIZE, pTargeFile))
	{
		fputs(strReadBuf, pTmpFile);
		memset(strReadBuf, 0, BUF_SIZE);
	}

	fclose(pTargeFile); 
	fclose(pTmpFile); 

	CopyFile(TMP_FILE, TRAGE_FILE, FALSE);

	DeleteFile(TMP_FILE);

	return TRUE;
} 

// 34位: _NUM\0
#define FILE_ID_LEN 32
char g_cFileID[34] = {0};

BOOL GetFileID(const char *strFilePath, char *pFileID/*[]*/)
{
	FILE *pTargeFile;

	pTargeFile = fopen(TRAGE_FILE, "r+");
	if (pTargeFile == NULL) 
	{ 
        printf("Could not open target file!\n");
		return FALSE;
	} 

	BOOL bFindItem = FALSE;
	char strReadBuf[BUF_SIZE] = {0};
	char *pTmpFileID = NULL;

	while (fgets(strReadBuf, BUF_SIZE, pTargeFile))
	{
		// Item块结束
		if (bFindItem && strstr(strReadBuf, "}\n") != NULL)
		{
			return FALSE;				
		}

		// 找到item
		if (bFindItem)
		{
			if (strstr(strReadBuf, "\"SourcePath\"") != NULL
				&& strstr(strReadBuf, strFilePath) != NULL)
			{
				printf("Find ID!\n");
				break;
			}
			else
			{			
				while (fgets(strReadBuf, BUF_SIZE, pTargeFile))
				{		
					// 到了SubItem块结尾
					if (strstr(strReadBuf, "}\n") == NULL)	
					{
						fgets(strReadBuf, BUF_SIZE, pTargeFile); // 跳过strItem与{
						if ((pTmpFileID = strstr(strReadBuf, "_")) != NULL)
						{
							strncpy(/***/pFileID, pTmpFileID, sizeof(g_cFileID) - 1);
						}
						break;
					}
					memset(strReadBuf, 0, BUF_SIZE);						
				}
				
			}
			memset(strReadBuf, 0, BUF_SIZE);	
			continue;
		}

		// 首先找到item
		if (strstr(strReadBuf, "\"File\"\n") != NULL)
		{
			bFindItem = TRUE;  
			fgets(strReadBuf, BUF_SIZE, pTargeFile); // 跳过strItem与{
			memset(strReadBuf, 0, BUF_SIZE);
			fgets(strReadBuf, BUF_SIZE, pTargeFile);
			if ((pTmpFileID = strstr(strReadBuf, "_")) != NULL)
			{
				strncpy(/***/pFileID, pTmpFileID, sizeof(g_cFileID) - 1);
			}
			memset(strReadBuf, 0, BUF_SIZE);	
			
		}

		memset(strReadBuf, 0, BUF_SIZE);	
	}

	fclose(pTargeFile); 

	return TRUE;
}


int main(int argc, char *argv[])
{

	char strFileID[34] = {0};
	const char *strFilePath = "..\\..\\SetupFile\\MyTest\\hello.txt";

	GetFileID(strFilePath, strFileID);

	printf("strFilePath:%s\nstrFileID:%s\n", strFilePath, strFileID);


	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值