2016-05-13 71 views
0

我試圖模擬ls命令的行爲。打印當前目錄的內容C++

我創建使用dirent.h庫

DIR *dir; 
    dirent *pdir; 
    dir=opendir("."); 
    while((pdir=readdir(dir))) 
    { 
     cout<< pdir->d_name << endl; 
    } 
    closedir(dir); 

我的當前目錄中包含兩個文件,Screen.cpp和a.out的一個簡單的代碼。我想此代碼以打印在順序,ls -la命令將例如

. 
.. 
a.out 
Screen.cpp 

然而這個代碼輸出它像

. 
Screen.cpp 
.. 
a.out 

是否有任何簡單的方法如何實現如此而不存儲/分揀列表在一些容器?

+1

很確定'readdir'沒有提供關於退貨順序的保證。 (無論是inode,磁盤位置,添加日期,還是其他) – vu1p3n0x

+0

我不允許使用unix系統命令 – Darlyn

+0

其實並不難。通過一小部分工作,您可以將'readdir'轉換爲迭代器。然後它變成總共三行來閱讀排序並打印條目。 –

回答

0

答案是否定的,你不能可靠地做到這一點,不存儲和排序值。

我會包裝DIR庫,以便我可以將它們用作迭代器。

MyCPPDir dir("."); 
std::set<std::string> objects(dir.begin(), dir.end()); 
std::copy(objects.begin(), objects.end(), 
      std::ostream_iterator<std::string>(std::cout, "\n")); 
+0

什麼是'MyCPPDir'? – scarface

+0

@lolofon:如果你花10分鐘時間,你可以將dirent lib包裝在一個C++包裝器中,該包裝器將一個目錄當作一個範圍來處理。那是什麼'MyCPPDir'是。 –

+0

我還不知道這個功能。謝謝。 – scarface