windows和linux獲取資料夾內容的一種方法

2021-08-20 23:37:48 字數 1813 閱讀 8514

windows:

使用標頭檔案:、

關鍵函式:_findfirst、_findnext

關鍵結構體:_finddata_t

[cpp] 

view plain

copy

_finddata_t

fileinfo;  

intptr_t

hfile;  

string root;  

root.assign(path);//資料夾絕對路徑

intlen = root.length();  

if( !isendobliqueline(path) )

//路徑的結尾不是『\』

);//路徑下的所有檔案

hfile = _findfirst(root.c_str(), &fileinfo);  

if( -1 == hfile)  

strcpy(m_currentpath, path);//儲存到m_currentpath

//清空之前path的資訊

filespathvector.clear();//自定義的儲存資訊的容器

do//儲存資訊

;  transfileinfo(fileinfo, tmpdirinfo);  

filespathvector.push_back(tmpdirinfo);  

}while

(_findnext(hfile, &fileinfo)   ==   0);  

linux:

使用標頭檔案: 、 、

關鍵函式:readdir、lstat

關鍵結構體:dirent

[cpp] 

view plain

copy

"white-space:pre;"

> dir *dir;  

if( !(dir = opendir(path)) )  

"white-space:pre;"

> strcpy(m_currentpath, path);

//儲存到m_currentpath

struct

dirent *d_ent;  

char

fullpath[128];  

filespathvector.clear();  

while

( (d_ent = readdir(dir)) != null )  

memset(fullpath, '\0'

, sizeof

(fullpath));  

strcpy( fullpath,  path);  

if( !strcmp(fullpath, 

"/") )  

strcat(fullpath, "/"

);  

strcat(fullpath, d_ent->d_name);  

if( lstat(fullpath, &file_stat) < 0 )  

//儲存資訊到自己的資料結構,在函式外面儲存檔名

listcmd_info tmpdirinfo = ;  

strcpy(tmpdirinfo.cfilename, d_ent->d_name);  

transfileinfo(&file_stat, tmpdirinfo);  

filespathvector.push_back(tmpdirinfo);  

}  closedir(dir);  

值得注意的是,此種方法windows的路徑分隔是用'\',而linux用'/',使用時多少有點不便。

如果有其他更好得方法,歡迎交流!

C 獲取linux和windows系統的使用者名稱

1 獲取linux系統的使用者名稱 通過 structpasswd getpwuid uid t uid 函式 該函式返回passwd結構體,此結構體中包含使用者名字段 structpasswd 2 獲取windows系統的使用者名稱 通過getusername buffer len 函式 3 完整...

C 獲取linux和windows系統的使用者名稱

1 獲取linux系統的使用者名稱 通過 structpasswd getpwuid uid t uid 函式 該函式返回passwd結構體,此結構體中包含使用者名字段 structpasswd 2 獲取windows系統的使用者名稱 通過getusername buffer len 函式 3 完整...

獲取Windows版本

要利用api獲取windows 8.1的版本號,必須自定義manifest檔案,指定程式支援windows8.1,manifest檔案如下 將manifest檔案應用到專案 專案 屬性 清單工具 輸入和輸出 將manifest檔案的名稱填入到 附加清單檔案 裡面,編譯。獲取windows版本的 如下...