linux — C ++ отображает проблему содержимого каталога

Во-первых, извините за плохое название, которое я назвал.

Это вопрос, который я только что задал:

Отображать файлы, содержащиеся в определенном каталоге, используя C ++ в LINUX

Это источник, на который я ссылаюсь:

Чтение содержимого каталогов

это РЕЗЬБА (C Программирование) с таким же выходом, как у меня.

Содержимое папки FileSystem

- test.txt
- abc.txt
- item.txt
- records.txt

main.cpp

#include <iostream>
#include <dirent.h>
using namespace std;

int main()
{
Dir* dir = opendir("/home/user/desktop/TEST/FileSystem");
struct dirent* entry;

cout<<"Directory Contents: "<<endl;
while((entry = readdir(dir)) != NULL)
{
cout << "%s " << entry->d_name << endl;
}
}

ВЫХОД

Directory Contents:

%s ..
%s item.txt
%s test.txt
%s records.txt
%s .
%s abc.txt

Мой главный вопрос, почему он будет отображать «..» и «.» на выходе. Почему это будет там, есть ли какое-то особое значение / цели? Как мне избавиться от этого и просто отображать файлы ТОЛЬКО в папке?

Заранее благодарю вас, ребята, за ответ на мой вопрос. Надеюсь, вы, ребята, не против, я задам много вопросов.

-1

Решение

В Unix и Windows все каталоги всегда содержат две записи "." (сам каталог) и ".." это родитель (или сам, в тех редких случаях, когда у него нет родителя). Под Unix обычно принято, что каталоги, чье имя начинается с '.' «скрыты» и не будут отображаться, но это зависит от программы отображения; когда вы читаете каталог, вы все равно видите его. Если вы хотите следовать этой конвенции, простой if в вашем цикле есть все что вам нужно:

dirent* entry = readdir( dir );
while ( entry != nullptr ) {
if ( entry->d_name[0] != '.' ) {
std::cout << entry->d_name << std::endl;
}
entry = readdir( dir );
}
0

Другие решения


По вопросам рекламы [email protected]