一个Word Count程序,由c++完成,有行数、词数、能完成路径下文件的遍历。
遍历文件部分的代码如下:
void FindeFile(wchar_t *pFilePath)
{
CFileFind finder;
CString Finddir;
Finddir.Format(pFilePath);
BOOL ret = finder.FindFile(Finddir);
while (ret)
{
ret = finder.FindNextFile();
CString strPath = finder.GetFilePath();
if (finder.IsDirectory())
{
wchar_t *temp = strPath.GetBuffer();
temp += strPath.GetLength();
while (*temp != ('\\'))
{
temp--;
}
CString Filename = temp;
if (Filename == "\\." || Filename == "\\..")
continue;//如果是目录不处理
else
{
FindeFile(strPath.GetBuffer());
//TRACE("目录:%s\r\n", strPath);
}
}
else
{
//TRACE("文件:%s\r\n", strPath);
wchar_t *test;
char *TEST;
test = strPath.GetBuffer(strPath.GetLength());
TEST = WtoC(test);
cout << "\n\n文件" << TEST << endl;
ReadFile(TEST);
}
}
finder.Close();
}
仍然是上次的问题,使用一些MFC的函数时,不可避免会使用到wchar_t类型的,为此写了两个函数WtoC与CtoW来实现两种字符类型字符串的互相转换,代码如下:
char* WtoC(wchar_t *a)
{
char* TEST;
size_t len = wcslen(a) + ;
size_t converted = ;
TEST = (char*)malloc(len*sizeof(char));
wcstombs_s(&converted, TEST, len, a, _TRUNCATE);
return TEST;
}
wchar_t* CtoW(char *a)
{
size_t len = strlen(a) + ;
size_t converted = ;
wchar_t *test;
test = (wchar_t*)malloc(len*sizeof(wchar_t));
mbstowcs_s(&converted, test, len, a, _TRUNCATE);
return test;
}
一开始写完时出现了遍历出来的文件名无法转换,不止无法转换,连输出都输出不了。卡在这一部分许久,至今未知其原因(过后此问题又莫名消失了)今后还是尽量少用两种字符类型字符串混用的程序。
查找行数、词数部分的代码就不贴了,写的图森破没什么好说的。
功能控制上使用了命令行参数,第一次使用这种方式。main函数如下:
int main(int argc, char* argv[])
{
char *filet = "d:\test\t.txt";
Wc wctest;
if (argv[][] == 's')
{
filet = argv[];
wchar_t* F;
F = CtoW(filet);
wctest.mod = 'o';
wctest.HL = ;
wctest.FindeFile(F);
cin >> filet;
return ;
}
if (argc == )
{
cout << "缺少参数!" << endl;
}
else if (argc == )
{
wctest.mod = 'o';
wctest.HL = ;
filet = argv[];
}
else if (argc == )
{
wctest.mod = argv[][];
wctest.HL = ;
filet = argv[];
}
else if (argc == )
{
wctest.mod = argv[][];
if (argv[][] == 'a')
wctest.HL = ;
else
wctest.HL = ;
filet = argv[];
}
wctest.ReadFile(filet);
cin >> filet;
return ;
}
参数中 -l 为行数检查、-w为词数检查,-c为字符数检查,-a为高级模式(空行、注释行、代码行),-o为全输出模式,-s为遍历模式。
在参数如下时
对如下的文件夹:
遍历结果如下:
没有对子路径下的文件继续遍历。