#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;
}
Setup1
最新推荐文章于 2023-04-28 10:19:39 发布