C語言目錄操作

2021-10-04 07:13:19 字數 3587 閱讀 1156

五、應用經驗

六、課後作業

目錄的操作不論是在嵌入式還是應用軟體程式設計都是必不可少的,不同的開發語言可能略有不同,本章節主要是討論在linux系統下目錄的一系列操作,以我的個人經驗,建立目錄和列出目錄中的檔案這兩個功能用得最多。

在shell中我們可以直接輸入命令pwd來顯示當前的工作目錄,在c程式中呼叫getcwd函式可以獲取當前的工作目錄。函式宣告:

char

*getcwd

(char

* buf,size_t size)

;

getcwd函式把當前工作目錄存入buf中,如果目錄名超出了引數size長度,函式返回null,如果成功,返回buf。例如:

char strpwd[

301]

;memset

(strpwd,0,

sizeof

(strpwd)

)getcwd

(strpwd,

300)

;printf

("當前目錄是:%s\n"

,strpwd)

;

函式宣告:

int

chdir

(const

char

*path)

;

就像我們在shell中使用cd命令切換目錄一樣,在c程式中使用chdir函式來改變工作目錄。

返回值:0-切換成功;非0-失敗。

在shell中可以通過mkdir/rmdir命令來建立/刪除目錄,c程式中用mkdir/rmdir函式來建立/刪除目錄。

建立目錄函式的宣告:

int

mkdir

(const

char

*pathname, mode_t mode)

;

mode的含義將按open系統呼叫的o_creat選項中的有關定義設定,當然,它還要服從umask的設定況,是不是看不明白?那先固定填0755,注意,0不要省略哦,它表示八進位制。 例如:

mkdir

("/tmp/aaa"

,0755);

// 建立/tmp/aaa目錄

刪除目錄函式的宣告:

int

rmdir

(const

char

*pathname)

;

在實際開發中,檔案是存放在目錄中的,在處理檔案之前,必須先知道目錄中有哪些檔案,所以要獲取目錄中的檔案列表。涉及到的庫函式如下:

#include

開啟目錄的函式opendir的宣告:

dir *

opendir

(const

char

*pathname)

;

讀取目錄的函式readdir的宣告:

struct dirent *

readdir

(dir *dirp)

;

關閉目錄的函式closedir的宣告:

int

closedir

(dir *dirp)

;

1)目錄指標dir

dir *目錄指標名;
2)struct dirent結構體

每呼叫一次readdir函式會返回乙個struct dirent的位址,存放了本次讀取到的內容,它的原理與fgets函式讀取檔案相同。

struct dirent

;

我們只需要關注結構體的d_type和d_name成員,其它的不必關心。

d_name檔名或目錄名。

d_type描述了檔案的型別,有多種取值,最重要的是8和4,8-常規檔案(a regular file);4-目錄(a directory),其它的暫時不關心。

示例(book123.cpp)

/*

* 程式名:book123.c,此程式用於演示讀取目錄下的檔名資訊

*/#include

#include

intmain

(int argc,

char

*ar**)

dir *dir;

// 定義目錄指標

// 開啟/tmp目錄if(

(dir=

opendir

(ar**[1]

))==0

)return-1

;// 用於存放從目錄中讀取到的檔案和目錄資訊

struct dirent *stdinfo;

while(1

)closedir

(dir)

;// 關閉目錄指標

}

執行效果

在實際開發中,對目錄的操作並不會像book123.c那樣簡單。

實際需求是這樣的,檔案存放在某目錄中,該目錄下還會有多級子目錄,程式設計師想要的是列出該目錄及其子目錄下全部的檔名。

例如存在/home/wucz/tmp目錄,其子目錄結構和檔案如下:

示例(book124.c)

/*

* 程式名:book124.c,此程式用於演示讀取目錄及其子目錄下全部的檔案資訊

*/#include

#include

// 列出目錄及子目錄下的檔案

intreaddir

(const

char

*strpathname)

;int

main

(int argc,

char

*ar**)

// 列出目錄及子目錄下的檔案

readdir

(ar**[1]

);}// 列出目錄及子目錄下的檔案

intreaddir

(const

char

*strpathname)

}closedir

(dir)

;// 關閉目錄指標

}

執行效果

這才是程式設計師想要的結果。

在某些c語言的教材裡,有遞迴函式這個概念,在我的教程裡,沒有講這個概念,實際上,book124.c的readdir函式就是乙個遞迴函式,在readdir函式中呼叫了自身。

編寫示例程式,把本章節介紹的知識點全部演示一遍,用程式演示可以加深您的理解和映象。

C語言目錄操作

1.在linux下要判斷乙個路徑是否是目錄,及遍歷這個路徑下的所有檔案,可以使用以下方式 主演使用的函式是 s isdir 判斷是否是目錄,傳入引數是stat.st mode dir opendir const char 開啟指定路徑 struct dirent readdir dir 開啟指定目錄...

C語言目錄操作

五 應用經驗 六 課後作業 目錄的操作不論是在嵌入式還是應用軟體程式設計都是必不可少的,不同的開發語言可能略有不同,本章節主要是討論在linux系統下目錄的一系列操作,以我的個人經驗,建立目錄和列出目錄中的檔案這兩個功能用得最多。在shell中我們可以直接輸入命令pwd來顯示當前的工作目錄,在c程式...

C語言目錄操作

五 應用經驗 六 課後作業 目錄的操作不論是在嵌入式還是應用軟體程式設計都是必不可少的,不同的開發語言可能略有不同,本章節主要是討論在linux系統下目錄的一系列操作,以我的個人經驗,建立目錄和列出目錄中的檔案這兩個功能用得最多。在shell中我們可以直接輸入命令pwd來顯示當前的工作目錄,在c程式...