小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

獲取目錄中的文件列表

 昵稱7394876 2012-03-30

獲取目錄中的文件列表

 

摘要:C/C++獲取指定目錄的所有的文件一直不存在一個可移植的方案,直至boost::filesystem出現(xiàn),并被標準庫接受為止。本文介紹了多個平臺中C/C++獲取目錄結(jié)點的方法,并指出filesystem庫的方式是C++標準方法。

問題

在寫程序經(jīng)常需要知道當前或相應(yīng)目錄存在哪些文件,或者指定文件存在與否。那么在C/C++如何完成呢?

答案

現(xiàn)在實中大家最常見的存在兩種平臺,一個平臺是Windows平臺,一個平臺是Linux或者說POSIX平臺,在這兩個平臺中完成相同的事有著不同的方法,但是都非常簡單的。一組簡單的函數(shù)就可以完成這些操作,對于應(yīng)用程序而言我們往往只需要這些。

在POSIX中,我們使用opendir、readdir、closedir來完成這個簡單的任務(wù);在Windows中,我使用findfirst、findnext、findclose來完成。由于我使用Linux系統(tǒng),并且平時沒有在Windows下寫過程序,所以下面我們只是針對POSIX平臺說明,其實沒有什么說明,給出一個簡單的例子就可以了:

#include<iostream>

#include<sys/types.h>
#include<dirent.h>

//打開當前目錄,然后讀取當前目錄中所有的結(jié)點
//并打印這個結(jié)點的名字
int main()
{
        //打開當前的目錄
        DIR* dir=opendir(".");

        //目錄里的一個結(jié)點
        struct dirent* entry;
        while((entry=readdir(dir)))
        {
                //打印第一個結(jié)點的名字
                std::cout << entry->d_name << std::endl;
        }

        //關(guān)閉相應(yīng)的目錄
        closedir(dir);

        return 0;
}

上面的程序可以在Linux正常運行。

我也注意了一下Windows的處理方式,它的函數(shù)接口沒有Linux簡捷,但卻功能要豐富一點,它提供了一個搜索的功能。

下面我說說如果移植解決我們這里的問題,要做到移植性需要一個中間層,這個中間層可以是我們手工去實現(xiàn),也可以使用別人的實現(xiàn)。當然如果別人已經(jīng)實現(xiàn)好了,那么就拿用吧,boost::filesystem已經(jīng)做到這一點了。本站存在這個庫的手冊,所以在這里就不多說了,可以過去參看:boost::filesystem指南。


http://cpp./book/c_%E9%97%AE%E9%A2%98%E9%9B%86/%E8%8E%B7%E5%8F%96%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%E6%96%87%E4%BB%B6%E5%88%97%E8%A1%A8

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多