设为首页 加入收藏

TOP

VS源文件提取工具vsjuicer 实现细节(一)
2014-11-23 19:26:29 】 浏览:386
Tags:源文件 提取 工具 vsjuicer 实现 细节

程序的主体框架如下列代码所示:

//by btwsmile

#include "stdafx.h"
#include "juice.h"

// entry
int _tmain(int argc, _TCHAR* argv[])
{
CJuice juicer(argc, argv);
juicer.Process();
return 0;
}
不难看出,真正进行处理的是CJuice类对象juicer。CJuice类定义在juice.h头文件中,它包含的成员变量有:

PTSTR m_pszWrongSyntax;
PTSTR m_pszInvalidPath;
PTSTR m_pszHelp;
int m_argc;
PTSTR* m_argv;
// complete delete
BOOL m_bComplete;
// report
DWORD m_dwFileCount;
DWORD m_dwFolderCount;
__int64 m_nFileSize;
DWORD m_dwMilliseconds;
// enum type
enum {
VSJT_WRONGSYNTAX = 1,
VSJT_INVALIDPATH,
VSJT_QUERYHELP,
VSJT_JUICE
};
前3个变量是字符串指针对象,它们是输出到屏幕上的提示信息。比如,当用户键入的命令有错误,则输出m_pszWrongSyntax提示语法错误。

m_argc和m_argv由main函数指定,它来自用户的输入。比如,用户键入命令vsj /help,此时m_argc = 2,而m_argv含两个字符串,即"vsj"和"/help"。
bool变量m_bComplete表示是否彻底删除文件和目录,缺省为FALSE,只有用户键入命令时使用了/C开关才将它置为TRUE。彻底删除的文件和目录不会进入回收站。

随后的4个整数变量是一些运行统计数据,依次表示:删除的文件计数、删除的目录计数、节省的磁盘空间以及操作所用的时间。

最后是一个匿名枚举,表示用户键入命令的意图。

CJuice类首先要实现自己的构造方法,在构造方法中初始化成员变量。

// constructor
CJuice(int argc, PTSTR* argv) : m_argc(argc), m_argv(argv), m_bComplete(FALSE),
m_dwFileCount(0), m_dwFolderCount(0), m_nFileSize(0), m_dwMilliseconds(0)
{
m_pszWrongSyntax = _T("Command syntax is incorrect.");
m_pszInvalidPath = _T("Invalid directory path.");
m_pszHelp = _T("\nVisual Studio Juicer (c)2012 by btwsmile")
_T("\nDelete insignificant files and directories of visual studio solutions.")
_T("\n\nVSJ path [/C]")
_T("\n\npath\tDirctory path containing visual studio solutions.")
_T("\n/C\tCompletely delete files and directories.")
_T("\n\nThis command only delete")
_T("\n(1) files with extension .sdf, .suo and .aps")
_T("\n(2) directories named ipch, debug and release.");
}
为了代码美观一点,3个字符串指针对象的初始化并未放在初始化列表中,这样做也并不会损害程序的效率。

main函数构造了CJuice类对象后,立马调用了Process方法,因此,CJuice需向外提供Process方法。定义如下所示:

// process
void Process()
{
int uRet = check_arguments();
switch(uRet) {
case VSJT_WRONGSYNTAX:
display(m_pszWrongSyntax); break;
case VSJT_INVALIDPATH:
display(m_pszInvalidPath); break;
case VSJT_QUERYHELP:
display(m_pszHelp); break;
case VSJT_JUICE:
m_dwMilliseconds = ::GetTickCount();
juice(m_argv[1]);
m_dwMilliseconds = ::GetTickCount() - m_dwMilliseconds;
report();
};
}
首先调用了私有方法check_arguments,判断用户键入命令的意图,然后对不同情况进行响应。display方法的作用是打印传入的字符串参数,实现很简单:

// display message
void display(PTSTR psz)
{
_tprintf(_T("%s\n"), psz);
}
juice是程序的核心方法,它将对目录进行提取处理,删除那些多余的中间文件。而report方法的作用是打印vsjuicer运行相关的统计数据。

下面依次来看check_arguments,juice以及report方法的实现。首先是check_arguments,其定义如下列代码所示:

// check arguments
UINT check_arguments()
{
if(m_argc < 2 || m_argc > 3)
return VSJT_WRONGSYNTAX;
if(m_argc == 2) {
if( ::lstrcmpi(m_argv[1], _T("/ ")) == 0 ||
::lstrcmpi(m_argv[1], _T("/help")) == 0)
return VSJT_QUERYHELP;
return is_path_valid() VSJT_JUICE : VSJT_INVALIDPATH;
}
if(::lstrcmpi(m_argv[2], _T("/c")) != 0)
return VSJT_WRONGSYNTAX;
else m_bComplete = TRUE;
return is_path_valid() VSJT_JUICE : VSJT_INVALIDPATH;
}
对用户键入的命令进行检查,也就是检查命令参数是否正确。vsjuicer仅仅支

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇模板的使用 下一篇VC++1.5K字节实现下载并远程注入

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目