一、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-hant/n/242468.html