2016-05-13 2 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

Смежные вопросы