批处理文件扩展名

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hujinglovekmg/article/details/78679699

需求:

起源于我使用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 == 64
    
    typedef long int                intptr_t;
    
    #else
    
    typedef 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. 尝试用+添加两个指针
阅读更多

没有更多推荐了,返回首页