C++ 目錄操作函數


opendir(打開目錄)

 
相關函數 open,readdir,closedir,rewinddir,seekdir,telldir,scandir
表頭文件 #include<sys/types.h>
#include<dirent.h>
定義函數 DIR * opendir(const char * name);
函數說明 opendir()用來打開參數name指定的目錄,並返回DIR*形態的目錄流,和open()類似,接下來對目錄的讀取和搜索都要使用此返回值。
返回值 成功則返回DIR* 型態的目錄流,打開失敗則返回NULL。
錯誤代碼 EACCESS 權限不足
EMFILE 已達到進程可同時打開的文件數上限。
ENFILE 已達到系統可同時打開的文件數上限。
ENOTDIR 參數name非真正的目錄
ENOENT 參數name 指定的目錄不存在,或是參數name 為一空字符串。
ENOMEM 核心內存不足。

 

readdir(讀取目錄)

 

相關函數 open,opendir,closedir,rewinddir,seekdir,telldir,scandir
表頭文件 #include<sys/types.h>
#include<dirent.h>
定義函數 struct dirent * readdir(DIR * dir);
函數說明 readdir()返回參數dir目錄流的下個目錄進入點。
結構dirent定義如下
struct dirent
{
ino_t d_ino;
ff_t d_off;
signed short int d_reclen;
unsigned char d_type;
har d_name[256;
};
d_ino 此目錄進入點的inode
d_off 目錄文件開頭至此目錄進入點的位移
d_reclen _name的長度,不包含NULL字符
d_type d_name 所指的文件類型
d_name 文件名
返回值 成功則返回下個目錄進入點。有錯誤發生或讀取到目錄文件尾則返回NULL。
附加說明 EBADF參數dir為無效的目錄流。

 

closedir(關閉目錄)

 
相關函數 opendir
表頭文件 #include<sys/types.h>
#include<dirent.h>
定義函數 int closedir(DIR *dir);
函數說明 closedir()關閉參數dir所指的目錄流。
返回值 關閉成功則返回0,失敗返回-1,錯誤原因存於errno 中。
錯誤代碼 EBADF 參數dir為無效的目錄流
范例 參考readir()。

 

下面我們開發一個小程序,這個程序有一個參數.如果這個參數是一個文件名,我們輸出這

個文件的大小和最后修改的時間,如果是一個目錄我們輸出這個目錄下所有文件的大小和

修改時間.

點擊(此處)折疊或打開

  1. #include <unistd.h>
  2. #include <stdio.h>
  3. #include <errno.h>
  4. #include <sys/types.h>
  5. #include <sys/stat.h>
  6. #include <dirent.h>
  7. #include <time.h>
  8. static int get_file_size_time(const char *filename) {
  9.     struct stat statbuf;
  10.     if (stat(filename, &statbuf) == -1) {
  11.         printf("Get stat on %s Error:%s\n",
  12.                 filename, strerror(errno));
  13.         return (-1);
  14.     }
  15.     if (S_ISDIR(statbuf.st_mode))return (1);
  16.     if (S_ISREG(statbuf.st_mode))
  17.         printf("%s size:%ld bytes\tmodified at %s",
  18.             filename, statbuf.st_size, ctime(&statbuf.st_mtime));
  19.     return (0);
  20. }
  21. int main(int argc, char **argv) {
  22.     DIR *dirp;
  23.     struct dirent *direntp;
  24.     int stats;
  25.     char buf[80];
  26.     if (argc != 2) {
  27.         printf("Usage:%s filename\n\a", argv[0]);
  28.         exit(1);
  29.     }
  30.     if (((stats = get_file_size_time(argv[1])) == 0) || (stats == -1))exit(1);
  31.     if ((dirp = opendir(argv[1])) == NULL) {
  32.         printf("Open Directory %s Error:%s\n",
  33.                 argv[1], strerror(errno));
  34.         exit(1);
  35.     }
  36.     while ((direntp = readdir(dirp)) != NULL){
  37.         sprintf(buf,"%s/%s",argv[1],direntp->d_name);
  38.         if (get_file_size_time(buf) == -1)break;
  39.     }
  40.     closedir(dirp);
  41.     exit(1);
  42. }
  43.   

int _access(const char *pathname, int mode);位於<io.h>中

pathname 為文件路徑或目錄路徑 mode 為訪問權限

如果文件具有指定的訪問權限,則函數返回0;如果文件不存在或者不能訪問指定的權限,則返回-1.

mode的值和含義如下所示:

00——只檢查文件是否存在

02——寫權限

04——讀權限

06——讀寫權限

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM