windows 上的 _splitpath 函數在 linux 平台下的簡單實現

來源:互聯網
上載者:User

標籤:windows   移植   linux   _splitpath   splitpath   

在做移植時, 發現了 _splitpath 在 linux 下是沒有的,於是決定自己寫下,也不難。

首先百科到如下內容:

聲明定義void _splitpath( const char *path, char *drive, char *dir, char *fname, char *ext );說明分解路徑,把你的完整路徑給分割開來,就是一個對字串進行分割的函數參數表path, Full path(完整路徑)drive , Optional drive letter, followed by a colon (:)(磁碟驅動包含:)dir, Optional directory path, including trailing slash. Forward slashes (/ ), backslashes (\ ), or both may be used.(檔案路徑,無論是以“/”,“\”)fname, Base filename (no extension)(檔案名稱)ext , Optional filename extension, including leading period (.)(尾碼名)---------------------------------------- 分割線出沒,請小心 --------------------------------------------

Linux 下實現及測試代碼如下:

#include <stdio.h>#include <string.h>#ifndef WIN32void _splitpath(const char *path, char *drive, char *dir, char *fname, char *ext);static void _split_whole_name(const char *whole_name, char *fname, char *ext);#endif/* main test */int main(void){char *path = "/home/test/dir/f123.txt";// char *path = "/home/test/dir/123.txt";// char *path = "/home/test/dir/123";// char *path = "123";// char *path = "123.txt";char drive[128];char dir[128];char fname[128];char ext[128];_splitpath(path, drive, dir, fname, ext);printf("path  = %s\n", path);printf("dir   = %s\n", dir);printf("fname = %s\n", fname);printf("ext   = %s\n", ext);return 0;}#ifndef WIN32void _splitpath(const char *path, char *drive, char *dir, char *fname, char *ext){char *p_whole_name;drive[0] = '\0';if (NULL == path){dir[0] = '\0';fname[0] = '\0';ext[0] = '\0';return;}if ('/' == path[strlen(path)]){strcpy(dir, path);fname[0] = '\0';ext[0] = '\0';return;}p_whole_name = rindex(path, '/');if (NULL != p_whole_name){p_whole_name++;_split_whole_name(p_whole_name, fname, ext);snprintf(dir, p_whole_name - path, "%s", path);}else{_split_whole_name(path, fname, ext);dir[0] = '\0';}}static void _split_whole_name(const char *whole_name, char *fname, char *ext){char *p_ext;p_ext = rindex(whole_name, '.');if (NULL != p_ext){strcpy(ext, p_ext);snprintf(fname, p_ext - whole_name + 1, "%s", whole_name);}else{ext[0] = '\0';strcpy(fname, whole_name);}}#endif
運行結果如下:

windows 上的 _splitpath 函數在 linux 平台下的簡單實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.