批处理文件扩展名

来源:互联网 发布:网络艺名大全男 编辑:程序博客网 时间:2024/09/21 08:16

需求:

起源于我使用markdown时,保存没有选择markdown格式。累积多次了之后觉得不好看,于是打算改成批处理格式可是一个一个就很难受,于是百度了下,然后感觉百度的东西,用它的批处理不足以显示程序员的逼格,于是就自己动手写了一段代码。

处理前的文件:
处理前

处理后的文件:
处理后

代码

#include<io.h>#include<string>#include<iostream>#include<exception>using namespace std;int main(){    try{        char *filepath = "C:\\Users\\hujing\\Desktop\\md";        intptr_t hFile;        size_t n;//无符号整型        string p,t;        struct _finddata_t fileinfo;        //_findfirst失败返回-1        if((hFile = _findfirst(p.assign(filepath).append("\\*").c_str(),&fileinfo)) != -1){            do{               if(!(fileinfo.attrib & _A_SUBDIR)){                   p.assign(filepath).append("\\").append(fileinfo.name);                   cout<<p<<endl;                   if(p.find('.md') == string::npos){//nops size_t的最大可能值,表示没有匹配                        t.assign(filepath).append("\\").append(fileinfo.name).append(".md");                        rename(p.c_str(),t.c_str());                        cout<<t<<endl;                    }               }            }while(_findnext(hFile,&fileinfo) == 0);            _findclose(hFile);        }    }catch(std::exception &e){         cout<<e.what()<<endl;    }}

遇到的问题

  1. gcc 不能捕获exception异常的解决
    c++标准 try, catch, throw是C++标准里的语法,标准只要求try catch捕获throw出来的异常,并不要求捕获系统异常(如被0除,段错误,CPU异常等)。从C++层面来说,不要期望try, catch能捕获系统异常。
    GCC所实现的C++异常处理框架中,它的catch(…)语法,并不能捕获系统异常。因此,这给C++中异常处理的良好运用打了大大的折扣;不同类型的系统异常等。所以Linux操作系统上的gcc编译的程序中,它只能捕获程序中,曾经被自己显式地throw出来的异常,而对于系统异常,catch block是毫无办法的。

  2. _findnext调用失败
    64bitwindows系统,使用intptr_t hFile instead of long

    2.1 使用int时也可以使用intptr_t来保证平台的通用性,它在不同的平台上编译时长度不同,但都是标准的平台长度,比如64位机器它的长度就是8字节,32位机器它的长度是4字节,定义如下:

    #if __WORDSIZE == 64typedef long int                intptr_t;#elsetypedef int                        intptr_t;#endif

    2.2 long64位平台8个字节32位平台4字节

  3. error C2110: “+”: 不能添加两个指针
    “char” :字符串常量是指针类型

参考

  1. windows 下用命令行编译和运行c/c++
  2. C/C++获取文件后缀名并且比较
  3. C++中修改文件夹名以及文件名
  4. C++异常处理
  5. gcc不能捕获系统异常
  6. _findnext Api 64bit下崩溃
  7. 语言编程需要注意的64位和32机器的区别
  8. 关于int、short int、long int、long long 的区别
  9. 尝试用+添加两个指针
原创粉丝点击