Sollyu

  • 捐赠
  • 关于
  1. 首页
  2. 原创文章
  3. 正文

【第七课】CheckComandLine之/Log 命令检查【一】

2014年6月4日 4563点热度 0人点赞 0条评论

上篇

上篇地址:【第六课】CheckComandLine之/?检查

上次回顾

上次我们讲到怎么样检查输入的命令为/?,当输入/?之后,程序将显示帮助信息。

内容预览

【第七课】CheckComandLine之/Log 命令检查

本节概要

本节课讲一下,怎么样检测输入的命令为/Log的设置命令。其中包括怎么样设置log文件日志。

在CheckComandLine函数中添加下面代码

// 2. find LOG command.
for (int i=1; i< argc; i++)
{
    CString csArgv = CString(argv[i]).MakeUpper();
    if (csArgv.Find(COMMAND_LOG) == 0) // find /LOG: command
    {
        CString csFullPath = CString(argv[i]).Mid(COMMAND_LOG.GetLength());
        cmdLineInfo.OptionLogFile = csFullPath;
    }
}// end of for

上面的代码中,是遍历所有的参数,直到找到COMMAND_LOG这个变量的内容,我们在wordsum.h头文件中添加对应的变量

const CString COMMAND_LOG  = _T("/LOG:");

这样我们就得到了输入的/LOG:的参数了。

/LOG:的参数检查

从帮助信息/?中我们可以得到/LOG:后面是跟一个文件路径,这里需要做一下文件路径的检查。

重复输入检查

首先要检查的是/LOG:命令不能被重复的输入。这里可以用cmdLineInfo.OptionLogFile的内容来判断,是否有被重复输入的/LOG:参数。

if ( !cmdLineInfo.OptionLogFile.IsEmpty() )
{
    g_Log.WriteLine(Log::LOG_ERROR,WORDSUM_MSG_ERR_007,COMMAND_LOG);
    return WORDSUM_RESULT_ERROR;
}

这里用到了一个WORDSUM_MSG_ERR_007资源,我们在资源中添加相应的字符串。

WORDSUM_MSG_ERR_007   "参数 %s 被重复定义。"

【第七课】CheckComandLine之/Log 命令检查

调试预览

【第七课】CheckComandLine之/Log 命令检查

空参数检查

在输入/LOG:中是不允许输入的内容为空的,所以这里也需要检查一下。

if ( csFullPath.IsEmpty() )
{
    g_Log.WriteLine(Log::LOG_ERROR,WORDSUM_MSG_ERR_003);
    return WORDSUM_RESULT_ERROR;
}

调试预览

【第七课】CheckComandLine之/Log 命令检查

判断输入的文件路径为文件夹

当/LOG:参数所代的参数文件为一个文件夹的情况下,这种情况是不被允许的。

// 获得程序的完整路径
csFullPath = GetAbsolutePath(csFullPath);

// 检查文件的属性是否为文件夹
if ( PathIsDirectory(csFullPath) )
{
    g_Log.WriteLine(Log::LOG_ERROR,WORDSUM_MSG_ERR_013);
    return WORDSUM_RESULT_ERROR;
}

在上面的代码中使用到了GetAbsolutePath函数,它的内容为如下:

/*************************************************************************/
/*   获得一个文件的绝对路径                                             */
/* [处理概要]                                                            */
/*   获得一个文件的绝对路径                                             */
/* [参数]                                                              */
/*   LPCTSTR lszFilePath [I]      一个文件的路径                        */
/* [返回值]                                                                 */
/*   这个文件对应的绝对路径                                             */
/* [备注说明]                                                            */
/*                                                                   */
/*************************************************************************/
__inline CString GetAbsolutePath(LPCTSTR lszFilePath)
{
    char szTemp[MAX_PATH] = {0};
    char** lppPart={NULL};

    GetFullPathName(lszFilePath,MAX_PATH,szTemp,lppPart)   ;

    return szTemp;
}

并在wordsum.h添加对应的声明

__inline CString GetAbsolutePath(LPCTSTR lszFilePath);

PathIsDirectory这两个函数。它在shlwapi.h头文件中被声明,我们只要wordsum.h头文件中添加shlwapi.h包含就可以使用

#include <shlwapi.h>

并添加WORDSUM_MSG_ERR_013资源,说明不能输入文件。

WORDSUM_MSG_ERR_013   "LOG文件不能指定为文件夹。"

调试预览

【第七课】CheckComandLine之/Log 命令检查

工程下载

下载地址:点击下载

结尾

考虑博客的长度,所以分开写。请看下篇

下篇地址:【第八课】CheckComandLine之/Log 命令检查【二】

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: CheckComandLine log VC++ word-sum 教程
最后更新:2014年6月4日

sollyu

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

COPYRIGHT © 2021 sollyu.com. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

苏ICP备15007531号