日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

獲取目錄中的文件列表

 昵稱7394876 2012-03-30

獲取目錄中的文件列表

 

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

問題

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

答案

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

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

#include<iostream>

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

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

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

        //關閉相應的目錄
        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)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多