三、utime庫函式
四、rename庫函式
五、remove庫函式
六、課後作業
本章節擴充套件一些目錄和檔案操作的更多知識,因為這些知識涉及到時間操作,所以放在時間操作之後的章節中介紹。
access函式用於判斷當前作業系統使用者對檔案或目錄的訪問許可權。
包含標頭檔案:
#include
函式宣告:
int
access
(const
char
*pathname,
int mode)
;
引數說明:
pathname檔名或目錄名,可以是當前目錄的檔案或目錄,也可以列出全路徑。
mode 需要判斷的訪問許可權。在標頭檔案unistd.h中的預定義如下:
#define r_ok 4
// r_ok 只判斷是否有讀許可權
#define w_ok 2
// w_ok 只判斷是否有寫許可權
#define x_ok 1
// x_ok 判斷是否有執行許可權
#define f_ok 0
// f_ok 只判斷是否存在
返回值:
當pathname滿足mode的條件時候返回0,不滿足返回-1。
在實際開發中,access函式主要用於判斷檔案或目錄是否是存在。
struct stat結構體用於存放檔案和目錄的狀態資訊,如下:
struct stat
;
struct stat結構體的成員變數比較多,對程式設計師來說,重點關注st_mode、st_size和st_mtime成員就可以了。注意st_mtime是乙個整數表達的時間,需要程式設計師自己寫**轉換格式。
st_mode成員的取值很多,或者使用如下兩個巨集來判斷。
s_isreg (st_mode) 是否為一般檔案
s_isdir (st_mode) 是否為目錄
包含標頭檔案:
#include
#include
#include
函式宣告:
int
stat
(const
char
*path,
struct stat *buf)
;
stat函式獲取path指定檔案或目錄的資訊,並將資訊儲存到結構體buf中,執行成功返回0,失敗返回-1。
示例(book145.c)
/*
* 程式名:book145.c,此程式演示目錄和檔案的訪問許可權和狀態資訊
*/#include
#include
#include
// 本程式執行要帶乙個引數,即檔案或目錄名
intmain
(int argc,
char
*ar**)
if(access
(ar**[1]
,f_ok)!=0
)struct stat ststat;
// 獲取檔案的狀態資訊if(
stat
(ar**[1]
,&ststat)!=0
)return-1
;if(s_isreg
(ststat.st_mode)
)printf
("%s是乙個檔案。\n"
,ar**[1]
);if(
s_isdir
(ststat.st_mode)
)printf
("%s是乙個目錄。\n"
,ar**[1]);}
執行效果
utime函式用於修改檔案的訪問時間和更改時間。
包含標頭檔案:
#include
函式宣告:
int
utime
(const
char
*filename,
const
struct utimbuf *times)
;
函式說明:utime()用來修改引數filename 檔案所屬的inode訪問時間。如果引數times為空指標(null),
則該檔案的訪問時間和更改時間全部會設為目前時間。結構utimbuf 定義如下:
struct utimbuf
;
返回值:執行成功則返回0,失敗返回-1。
rename函式用於重新命名檔案或目錄,相當於作業系統的mv命令,對程式設計師來說,在程式中極少重新命名目錄,但重新命名檔案是經常用到的功能。
包含標頭檔案:
#include
函式宣告:
int
rename
(const
char
*oldpath,
const
char
*newpath)
;
引數說明:
oldpath 檔案或目錄的原名。
newpath 檔案或目錄的新的名稱。
返回值:0-成功,-1-失敗。
remove函式用於刪除檔案或目錄,相當於作業系統的rm命令。
包含標頭檔案:
#include
函式宣告:
int
remove
(const
char
*pathname)
;
引數說明:
pathname 待刪除的檔案或目錄名。
返回值:0-成功,-1-失敗。
1)繼續豐富您的函式庫,用mkdir建立目錄的時候,例如mkdir("/tmp/aaa/bbb/ccc",0755);,如果上級目錄不存在(/tmp/aaa或/tmp/aaa/bbb不存在),是無法建立/tmp/aaa/bbb/ccc目錄的,這不是程式設計師想要的,我們要再寫乙個函式,如果上級目錄不存在,就建立上級目錄,一級一級的建立,函式的宣告如下:
int
mkdir
(const
char
*pathname)
;
2)編寫乙個獲取檔案時間的函式,宣告如下:
// 獲取檔案的時間,即modtime
void
filemtime
(const
char
*in_fullfilename,
char
*out_modtime)
;
out_modtime的格式是"yyyy-mm-dd hh24:mi:ss"。
3)編寫乙個獲取檔案大小的函式,宣告如下:
// 獲取檔案的大小,返回位元組數
intfilesize
(const
char
*in_fullfilename)
;
4)rename函式有乙個不足,如果目標檔名目錄newpath的上級目錄不存在,函式返回失敗,重寫乙個新的rename函式,如果newpath的上級目錄不存在,先建立newpath的上級目錄,再rename,函式的宣告如下:
int
rename
(const
char
*oldpath,
const
char
*newpath)
;
5)utime函式的第二個引數是乙個結構體utimbuf,不方便使用,在實際開發中,我們更希望是乙個字串格式的時間,如:「2019-02-08 12:05:02」,重寫乙個utime函式,功能與utime相同,但是把第二個引數改為字串格式的時間,函式的宣告如下:
int
utime
(const
char
*filename,
const
char
*strtime)
;
C 操作目錄和檔案
1 通過path類的combine方法可以合併路徑。string activedir c mydir string newpath system.io.path.combine activedir,mysubdirone 2 目錄的建立。建立目錄時如果目錄已存在,則不會重新建立目錄,且不會報錯。建立...
C 操作目錄和檔案
1 通過path類的combine方法可以合併路徑。string activedir c mydir string newpath system.io.path.combine activedir,mysubdirone 2 目錄的建立。建立目錄時如果目錄已存在,則不會重新建立目錄,且不會報錯。建立...
Linux C語言操作檔案目錄和檔案
qq群 852283276 b站 主頁 linux c 遍歷目錄及檔案 linux c 遍歷目錄及目錄下檔案 獲取檔案屬性 stat lstat fstat linux c語言遍歷資料夾所有檔案 stat與lstat的區別,當乙個檔案是符號鏈結時,lstat返回的是該符號鏈結本身的資訊,stat返回...