用c语言修改文件名

概述

最近在写一个小工具,就拿c语言写工具练练手,由于c语言只提供标准库,在将文件名修改为指定对格式的时候还是要自己手动实现.

代码实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*
 *1.去除文件路径  /csharp/mypack.exe => mypack.exe
 *2.修改文件名字  mypack.exe => mypack_exe 或者 my-pack.exe => my_pack_exe
 */

char *edit_filename(char *filename);

int main(int argc,char *argv[])
{
    for(int i = 1;i < argc;i++)
    {
         char *filepath = edit_filename(argv[i]);
         printf("输出%d文件名:%s\n",i,filepath);
         if(filepath != NULL)
         {
             free(filepath);
         }
    }
    return 0;
}

char *edit_filename(char *filename)
{
    int filename_len = (int)strlen(filename);	//获取文件(路径)的长度
    int index = 0;
    for(int i = filename_len - 1;i > 0;i--)
    {
        //如果文件中有'\\'或者'/',说明是包含路径对
        if(filename[i] == '\\' || filename[i] == '/')
        {
            index = i + 1;
            break;
        }
    }
    filename_len = filename_len - index;
    int str_size = sizeof(char) * filename_len + 1;
    char *tmp_filename = malloc(str_size);      //申请一片空间,存放文件名
    if(tmp_filename == NULL)                    //如果失败,则返回NULL
    {
        return NULL;
    }
    memset(tmp_filename,0,str_size);            //对申请空间进行初始化
    for(int i = 0; i < str_size; i++)
    {
        tmp_filename[i] = filename[index + i];
    }
    char *out_filename = malloc(str_size);      //申请空间,存放处理过对文件名
    if(out_filename == NULL)
    {
        return NULL;
    }
    memset(out_filename,0,str_size);
    for(int i = 0; i < str_size; i++)
    {
        if(tmp_filename[i] == '.' || tmp_filename[i] == '-')
        {
            out_filename[i] = '_';
        }
        else
        {
            out_filename[i] = tmp_filename[i];
        }
    }
    out_filename[str_size] = '\0';              //字符串结束
    if(tmp_filename != NULL)
    {
        free(tmp_filename);
    }
    return out_filename;
}

给XCode设置参数

设置xcode的参数

测试结果

执行结果
秋风 2018-01-18