⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 一个用C++写成的
💻 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 + -