Just a Computer Graphics Studio & My Life

因為IR作業需要用到讀取資料夾中檔案名稱,於是特地去找了一下網路上的資料。其實我是不用寫啦~阿那達從學長那兒問道如何使用C語言(參考Simple Directory Lister – The GNU C Library),而她要我去學用C++的方式來實做,然而我找到的程式碼一定會用到C的函式,看官比較一下連結和底下程式碼就知道囉~

/**
	Theme: List a Directory
	compiler: Dev C++ 4.9.9.2
	Date: 100/04/16
	Author: ShengWen
	Blog: https://cg2010studio.wordpress.com/
*/
#include <sys/types.h>
#include <dirent.h>
#include <errno.h>
#include <vector>
#include <string>
#include <iostream>
using namespace std;
int getdir(string dir, vector<string> &files);
int main(){
    string dir = string(".");//資料夾路徑(絕對位址or相對位址)
    vector<string> files = vector<string>();
    getdir(dir, files);
	//輸出資料夾和檔案名稱於螢幕
    for(int i=0; i<files.size(); i++){
        cout << files[i] << endl;
    }
    system("pause");
    return 0;
}
int getdir(string dir, vector<string> &files){
    DIR *dp;//創立資料夾指標
    struct dirent *dirp;
    if((dp = opendir(dir.c_str())) == NULL){
        cout << "Error(" << errno << ") opening " << dir << endl;
        return errno;
    }
    while((dirp = readdir(dp)) != NULL){//如果dirent指標非空
        files.push_back(string(dirp->d_name));//將資料夾和檔案名放入vector
    }
    closedir(dp);//關閉資料夾指標
    return 0;
}

需要注意的地方在資料夾路徑:字串中「.」表示當下資料夾,可以使用相對路徑絕對路徑

相對路徑只能存取該資料夾底下的資料夾,若該資料夾底下有個叫做pic的資料夾,字串為「pic」;

絕對路徑則可存取硬碟中所有資料夾,例如我要存取C:\OpenCV2.2這個資料夾,那麼字串為「C:\\OpenCV2.2」,記得要多一個「\」跳脫字元。

這裡必須要注意的是,路徑中的資料夾名稱必須「沒有空白鍵」,例如:「C:\\Documents and Settings\WEN\My Documents\My Dropbox」這樣子就不行,因為Documents and SettingsMy Documents都「有空白鍵」,因此會產生錯誤訊息:

Error(2) opening C:\Documents and SettingsWENMy DocumentsMy Dropbox
請按任意鍵繼續 . . .

以上目前我不知道要怎麼解決,知道的人告訴我一下吧:p~以下為我執行上述程式碼的結果:

.
..
3n+1.cpp
Art of Pointer.cpp
Compute Time of Execution.cpp
Fabonacci Number.cpp
Generate Random Number.cpp
Insert Line Number In Code.cpp
int2char.cpp
int2string.cpp
List a Directory.cpp
List a Directory.exe
Literal.cpp
Normal Distribution.cpp
Precision.cpp
Read Size of File.cpp
RunLengthEncoding.cpp
SetTimer函數的用法.doc
snake.cpp
snake.exe
snakeOpenGL.cpp
snakeOpenGL.exe
參數傳遞的傳值、傳址、傳參考.doc
計算程式執行時間.cpp
計算記憶體使用狀況(VC++).cpp
請按任意鍵繼續 . . .

剛才有說一個點(.)表示當下資料夾,那兩個點(..)呢?表示上一層資料夾。
很神奇的是剛編譯完成就會產生.exe檔,看到上頭紅色字體,即是本程式碼的執行檔喔!

參考:C++ List Files In Directory

廣告

Comments on: "[C/C++] 列出資料夾中檔案名稱 (List a Directory)" (10)

  1. 我想問 如果我想把 列出來的檔案名稱 存進一個字串矩陣 在用存進去的字串 輸出在一個 TXT 檔 我該怎麼呢

    喜歡

  2. 全部都需要加上跳脫字元就可以嘍
    C:\Documents and SettingsWENMy DocumentsMy Dropbox
    |
    |
    V
    C:\\Documents and Settings\\WEN\\My Documents\\My Dropbox

    喜歡

  3. 應該是說把資料夾裡的檔名全部都改

    喜歡

  4. 那是否可以教我一下,因為我真的已經想很久想不出來!!

    喜歡

  5. 請問一下那如果在這個程式底下,把讀取的檔名改成騎他的檔名,然後顯示出來,有辦法嗎?
    例如:apple.avi -> banana.avi

    喜歡

  6. 您好:
    請問可以讓他跑出特定的檔案嗎?
    例如:都跑出.cpp檔或是.jpg檔
    謝謝

    喜歡

發表留言

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

標籤雲

%d 位部落客按了讚: