#include <stdio.h>
#include <tchar.h>
#include <stdlib.h>
#include <windows.h>
#define SYSTEM_ROOT_C "C://WINDOWS//System32//"
#define CHANGE_PATH_C_WINDOW "//Add//C//WINDOWS//System32//"
BOOL ChangeRelativePath(
LPCTSTR pszAbsolutePath, // IN 绝对路径
LPCTSTR pszFileName, // IN 文件名称
LPCTSTR pszChangePath, // IN 源字符串中需要替换的字符
LPCTSTR pszEnvironmentPath, // IN 替换成的(环境变量)字符
LPTSTR psz512SizeBuffer // OUT 返回的字符串
)
{
if (!pszAbsolutePath || !pszFileName || !pszChangePath || !pszEnvironmentPath || !psz512SizeBuffer)
{
return FALSE;
}
int nFilePathLength = 0;
DWORD m_dwLenSrcDir = 0;
LPTSTR pszFilePath = NULL;
LPTSTR pszRelativePath = NULL;
TCHAR szFilePath[MAX_PATH] = {0};
TCHAR szDstPath[512] = {0};
sprintf(szFilePath,"%s%s",pszAbsolutePath,pszFileName);
pszFilePath = szFilePath;
pszRelativePath = pszFilePath + m_dwLenSrcDir;
if (_T('//') == *pszRelativePath)
pszRelativePath++;
LPTSTR pszFind = NULL;
pszFind = strstr(pszAbsolutePath, pszChangePath);
if (!pszFind)
{
return FALSE;
}
else
{
strcpy(szDstPath, pszEnvironmentPath);
strcat(szDstPath, pszFileName);
}
__try
{
memset(psz512SizeBuffer, 0, 512);
nFilePathLength = strlen(szDstPath);
memcpy(psz512SizeBuffer, szDstPath, nFilePathLength);
psz512SizeBuffer[nFilePathLength] = '/0';
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
return FALSE;
}
return TRUE;
}
int main(int argc, char* argv[])
{
TCHAR szBuffer[512] = {0};
if (ChangeRelativePath(
"D://Update//Add//C//WINDOWS//System32//",
"notepad.exe",
CHANGE_PATH_C_WINDOW,
SYSTEM_ROOT_C,
szBuffer)
)
{
printf(szBuffer);
printf("/r/n");
}
return 0;
}