📄 main.cpp
字号:
/*
ProjectName: MarkReaded v1.2
ModuleName: main
FileName: main.cpp
DateBegin: 2004-10-07
DateEnd: 2004-10-08
Author: Gashero Liu.
E-mail: gashero@163.com
Version: 1.2.1-xx-Win32NT
Copyright@1999-2004, Gashero Liu.
Comment:
转换文本文件扩展名的小程序,把扩展名从.txt转换为.text后
标志为已经阅读过,反之则标志为未读。
*/
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include "datastruct.cpp"
//functions declaretion
void Version(void);
void Params(void);
void HelpCN(void);
void HelpEN(void);
void Credit(void);
bool FileExists(char filename[]);
FileExtension GetFileExt(char filename[]);
void ChangeFileExt(char filename[], FileExtension toExt);
using namespace std;
int main(int argc, char *argv[])
{
switch(argc) //判断参数个数不同而执行的参数
{
case 1: //当没有参数时,显示版本信息和参数,然后退出---------
{
Version();
Params();
break;
};
case 2: //有一个参数时,判断不同的参数功能-------------------
{
if(strlen(argv[1])==1)
{
//当参数字母数为1时,显示相关信息
char param;
param=argv[1][0];
switch(param)
{
case 'v':
{
Version();
break;
};
case 'h':
{
Version();
HelpCN();
break;
};
case 'H':
{
Version();
HelpEN();
break;
};
case 'c':
{
Version();
Credit();
break;
};
default:
{
Version();
cout << "参数错误!" << endl << endl;
Params();
break;
};
};
}
else
{
//参数字母数不只一个时,进行文件操作
//Version(); //这样友好一些
char filename[MAXFILENAMELEN];
strcpy(filename,argv[1]);
for(int i=0;i<MAXFILENAMELEN;i++)
{
filename[i]=tolower(filename[i]);
/*把文件名全部转换为小写以方便后面的判定*/
};
if(FileExists(filename))
{
FileExtension nowExt;
nowExt=GetFileExt(filename);
switch(nowExt)
{
case Txt:
{
ChangeFileExt(filename, Text);
//cout << "转换成功!" << endl;
break;
};
case Text:
{
ChangeFileExt(filename, Txt);
//cout << "转换成功!" << endl;
break;
};
case Other:
{
cout << "错误的文件类型!" << endl;
cout << "本程序只支持.text和.txt";
cout << "扩展名文件的处理。" << endl;
cout << "请检查文件类型是否正确" << endl;
break;
};
/*在GetFileExt函数中已经判断了扩展名的各种情况
在此处略掉不可能出现的其他扩展名情况,所以生路
default:语句。*/
};
}
else
{
cout << "原文件不存在或无法更改!" << endl;
cout << "请检查原文件名是否有错误或";
cout << "将原文件的只读属性去掉。" << endl;
};
};
break;
};
default: //参数超过一个时,错误,显示参数信息-----------------
{
Version();
cout << "参数过多!" << endl;
Params();
break;
};
}
//system("PAUSE"); //正式发行版去掉此行-----------------------------
return 0;
}
void Version(void)
/*显示版本号 */
{
//DONE: 显示版本号
cout << "Mark Readed Version 1.2.1 Build 78" << endl;
cout << "Copyright @ 1999-2004, Gashero Liu." << endl << endl;
cout << "Author: gashero" << endl;
cout << "E-mail: gashero@163.com" << endl << endl;
}
void Params(void)
/*显示命令行参数*/
{
//DONE: 显示命令行参数
cout << "v: 显示版本号" << endl;
cout << "h: 显示中文帮助信息" << endl;
cout << "H: 显示英文帮助信息" << endl;
cout << "c: 鸣谢" << endl;
cout << "filename: 转换文件扩展名,自动识别并更改" << endl;
}
void HelpCN(void)
/*显示中文帮助信息*/
{
//DONE: 显示中文帮助信息
cout << " 这是一个转换文件扩展名的小程序,他可以将.txt";
cout << "扩展名的文本文件转换为.text扩展名的文本文件。";
cout << "他的用处么,就是标记一些文本文件为已经读过。";
cout << "配合程序附带的注册表文件,可以把程序注册关联";
cout << "到文本文件的快捷菜单中来做标记" << endl;
cout << " 这个小程序实际上是我关于C++命令行参数处理实验";
cout << "的一个实验程序。当然,对我收集的数量庞大的文本";
cout << "文件也是很有用处的。希望他可以给你带来方便。";
cout << endl;
}
void HelpEN(void)
/*显示英文帮助信息*/
{
//DONE: 显示英文帮助信息
cout << "My English is so bad that I found my article ";
cout << "couldn't be read. So if you can translate my ";
cout << "help file, please send to me. Thank you!" << endl;
}
void Credit(void)
/*显示鸣谢,中文*/
{
//DONE: 显示鸣谢
cout << " 在此首先感谢对我编程上给予我巨大帮助的石宝英老师";
cout << ",他能在百忙之中多次指导我的问题。还有教给我很多实";
cout << "践经验的谢世满老师。同时还要感谢4年以来,一直于我交";
cout << "换源代码,互相学习的刘禹承。另外,还应感谢我的室友";
cout << ",在我通宵写代码时,对我的谅解。" << endl;
}
bool FileExists(char filename[])
/*判断文件是否存在而且可以更改*/
{
//DONE: 判断文件是否存在而且可以更改
FILE *fe;
fe=fopen(filename, "r");
if(fe==NULL)
{
return false;
}
else
{
fclose(fe);
}; //文件存在
fe=fopen(filename, "a");
if(fe==NULL)
{
return false;
}
else
{
fclose(fe);
}; //文件可以改名
return true;
}
FileExtension GetFileExt(char filename[])
/*判断文件扩展名*/
{
//DONE: 判断文件扩展名
char asubstr[MAXFILENAMELEN];
char plast[MAXFILENAMELEN];
//判断是否是.txt扩展名
plast[0]='\0';
strcpy(asubstr,filename);
while(strstr(asubstr, ".txt")!=NULL)
{
strcpy(plast,strstr(asubstr, ".txt"));
strcpy(asubstr,strstr(plast,"xt"));
};
if(strcmp(plast, ".txt")==0)
{
return Txt;
};
//判断是否是.text扩展名
plast[0]='\0';
strcpy(asubstr,filename);
while(strstr(asubstr, ".text")!=NULL)
{
strcpy(plast,strstr(asubstr, ".text"));
strcpy(asubstr,strstr(asubstr,"xt"));
};
if(strcmp(plast, ".text")==0)
{
return Text;
}
else
{
return Other;
};
}
void ChangeFileExt(char filename[], FileExtension toExt)
/*改变文件扩展名,toExt为新扩展名*/
{
//DONE: 改变文件扩展名
char newfilename[MAXFILENAMELEN];
char *plast;
char *finalExt;
char oldExt[5];
char newExt[5];
int retValue;
if(toExt==Txt)
{
strcpy(oldExt, ".text");
strcpy(newExt, ".txt");
}
else
{
strcpy(oldExt, ".txt");
strcpy(newExt, ".text");
};
strcpy(newfilename, filename);
plast=newfilename;
while((strstr(plast, oldExt)!=NULL))
{
plast=strstr(plast, oldExt);
finalExt=plast;
plast++;
}
*finalExt='\0';
strcat(finalExt, newExt);
retValue=rename(filename, newfilename);
if(retValue!=0)
{
cout << "文件更名时发生以外错误!" << endl;
cout << "错误代码:" << retValue << endl;
cout << "希望你可以将出错情况提交给我,多谢。" << endl;
cout << "E-mail: gashero@163.com" << endl;
};
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -