一、getname函數的定義
char *getname(const char *path);
getname函數的作用是從路徑中提取文件名,並以字元串形式返回。函數的參數path是指文件路徑。
二、getname函數的用法
使用getname函數需要引用頭文件<libgen.h>。
#include <stdio.h>
#include <libgen.h>
int main(){
char path[] = "/home/user/example.txt";
char *name = getname(path);
printf("The file name is: %s\n", name);
return 0;
}
運行結果:
The file name is: example.txt
getname函數返回的字元串指針指向的內存空間是在函數內部動態分配的,使用完畢後需要手動釋放。
char *name = getname(path); //... free(name);
三、getname函數的實現原理
getname函數的實現原理比較簡單,可以通過查看頭文件<libgen.h>中的源碼得出。
/* Return the last component of PATH. */ extern char *getname (__const char *__path) __THROW;
getname函數的本質是調用了一個叫做basename的函數。
/* Return the last component of the file name in PATH. */
char *
basename (const char *path)
{
const char *base = strrchr (path, '/');
return base ? (char *) base + 1 : (char *) path;
}
basename函數也是一個用於提取文件名的函數,其實現原理也很簡單:先在路徑中查找最後一個斜杠字元(/),如果找到了則將其後面的部分返回;如果沒有找到則將整個路徑返回。
四、getname函數的應用場景
getname函數可以用於很多場合,例如需要獲取文件名進行操作時。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <libgen.h>
void rename_file(const char *path, const char *new_name){
char *dir = dirname(path);
char *name = getname(path);
int len = strlen(dir) + strlen(new_name) + 2;
char *new_path = (char *)malloc(sizeof(char) * len);
sprintf(new_path, "%s/%s", dir, new_name);
rename(path, new_path);
free(name);
free(dir);
free(new_path);
}
int main(){
char path[] = "/home/user/example.txt";
char new_name[] = "new_example.txt";
rename_file(path, new_name);
return 0;
}
rename_file函數可以將路徑為path的文件重命名為new_name。該函數先調用dirname函數提取文件的路徑,然後再調用getname函數提取文件名,最後將文件路徑與新文件名組合成新的文件路徑進行重命名。
五、getname函數的注意事項
在使用getname函數時需要注意以下幾點:
- getname函數只能用於提取文件名,不適用於提取目錄名。
- getname函數對於文件名中不同平台上不同的路徑分隔符處理不一定一致,建議事先對路徑進行統一處理。
- getname函數返回的字元串指針指向的內存空間是在函數內部動態分配的,使用完畢後需要手動釋放。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/242468.html
微信掃一掃
支付寶掃一掃