日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言批量修改文件名称,C语言实现批量文档名修改

發(fā)布時間:2023/12/14 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言批量修改文件名称,C语言实现批量文档名修改 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

8種機械鍵盤軸體對比

本人程序員,要買一個寫代碼的鍵盤,請問紅軸和茶軸怎么選?

在Windows的資源管理器中,可以對文檔批量修改,但是修改后的文檔名格式不可以自定義,總是會產生括號包圍數(shù)字。現(xiàn)在Windows通過對WSL的支持,可以在WSL中對Windows中的文檔進行操作,所以可以使用Linux C編程來批量修改文檔名。代碼如下。main函數(shù)有兩個參數(shù)或者一個參數(shù),工作目錄為當前目錄時,可以只把文檔名模板比如:picture22.png傳入,如果工作目錄不是當前目錄,則需要把目錄作為第一個參數(shù),文檔名模板作為第二個參數(shù)傳入。運行進程后,文檔名就會批量修改成picture23.png、picture24.png等等,也就是數(shù)字會自動加一,其他部分不變。#include "headers.h"

#define MAXNAMELENGTH 1024

//獲取文檔名后綴,file_name是指向文檔名的指針,extension是返回的指向后綴的指針

void get_extension(const char *file_name, char *extension) {

int i, length;

length = strlen(file_name);

i = length - 1;

while (i >= 0) {

if (file_name[i] == '.')

break;

i --;

}

if (i < length && i >= 0)

strcpy(extension, file_name+i+1);

else

strcpy(extension, " ");

}

int main(int argc, char **argv) {

char *path, *name;

/**

* 如果只有一個外部參數(shù),那么把當前目錄作為工作目錄

* 如果有兩個外部參數(shù),把第一個參數(shù)當作工作路徑,第二個參數(shù)為文檔名格式

* 兩個都不是的話,參數(shù)出錯返回

*/

if (argc == 2) {

path = "./";

name = argv[1];

} else if (argc == 3) {

path = argv[1];

name = argv[2];

} else {

err_quit("args error: %d", argc);

}

DIR *dp;

struct dirent *drp;

/**

* oldname是文檔本來的名字

* newmname是文檔要被修改的名字

*/

char oldname[MAXNAMELENGTH], newname[MAXNAMELENGTH];

int n;

/**

* 進程的name參數(shù)可以分成三部分,如下所示。

* 假設name為Picture10lalala.png

* namestart內容就是Picture,nums就是10, lalal.png就是nameEnd的內容

* 用這三個部分進行新文檔名的合成

*/

char nameStart[MAXNAMELENGTH/8], nameEnd[MAXNAMELENGTH/8], nums[MAXNAMELENGTH/8];

/**

* 保存文檔后綴

*/

char extForm[10], extTemp[10];

if ((dp = opendir(path)) == NULL) {

perror("opendir failed");

exit(-1);

}

sscanf(name, "%[^0-9]%[0-9]%[^0-9]", nameStart, nums, nameEnd);

get_extension(name, extForm);

//puts(extForm);

n = atoi(nums);

if (nameStart == NULL || nameEnd == NULL || nums == NULL || strlen(nameStart) == 0 || strlen(nameEnd) == 0 || strlen(nums) == 0) {

printf("name format errorn");

exit(-1);

}

//printf("%s:%s:%sn", nameStart, nums, nameEnd);

printf("Operating dir: %sn", path);

/**

* 遍歷目錄中的內容

*/

while ((drp = readdir(dp)) != NULL) {

get_extension(drp->d_name, extTemp);

/**

* 如果讀到的文檔后綴和文檔名模板的后綴一樣,則進行如下操作

*/

if (!strcmp(extForm, extTemp)) {

/**

* 為了方便修改名字,新名字和舊名字都使用絕對路徑

* 根據(jù)path最后是否有/來對名字進行合成

*/

if (path[strlen(path)-1] == '/') {

sprintf(oldname, "%s%s", path, drp->d_name);

sprintf(newname, "%s%s%d%s", path, nameStart, n, nameEnd);

} else {

sprintf(oldname, "%s/%s", path, drp->d_name);

sprintf(newname, "%s/%s%d%s", path, nameStart, n, nameEnd);

}

//printf("old name: %sn", oldname);

//printf("new name: %sn", newname);

if (rename(oldname, newname) < 0) {

perror("rename failed");

exit(-1);

}

n ++;

}

}

closedir(dp);

printf("All stuf rename successedn");

return 0;

}

總結

以上是生活随笔為你收集整理的c语言批量修改文件名称,C语言实现批量文档名修改的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。