Поиск в каталоге C ++

0

Поэтому я пытаюсь написать небольшую C++ программу, чтобы проверить, существует ли каталог на платформе Windows (я знаю, что другие языки более подходят для такого типа использования, но я хочу сделать это в C++ ]).

Это то, что я до сих пор (он компилирует):

std::string DirectorySelector::SpecifyDirectory(void)
{
    std::cout << "Enter directory for file renaming: ";
    std::cin >> directory;

    if (ValidateDirectory(directory) == 1) { SpecifyDirectory(); }
    else { return directory; }
}

int DirectorySelector::ValidateDirectory(std::string directory)
{
    error = "Error 01: Directory not found.";

    std::ifstream fin (directory);
    if (!fin) 
    { 
        std::cerr << error << "\n\n"; 
        fin.close();
        return 1;
    }
    else
    {
        fin.close();
        return 2;
    }
    }

Поэтому, очевидно, я сейчас прошу пользователя ввести желаемый каталог в виде строки, не уверен, что это разумный выбор?

Я немного исследовал, имеют ли папки (каталоги) Windows расширение, но это не так.

Я предполагаю, что у меня отсутствует что-то очевидное, например, предопределенное ключевое слово C++ для использования где-то?

Если какие-либо ответы могут быть полностью объяснены в отношении того, что происходит, это будет фантастично, поскольку я не люблю использовать вещи, которые я не понимаю.

Плюс любые советы, связанные с стандартами кодирования, которые я, возможно, не придерживаюсь, несомненно, будут высоко оценены.

Заранее спасибо.

  • 0
    под «расширением» вы подразумеваете символ точки. Каталоги могут содержать их. Я бы посоветовал вам взглянуть на boost :: filesystem
  • 0
    fin закроется при выходе из функции, что также хорошо, учитывая, что строки, закрывающие его в вашем коде, недоступны. Если имя является каталогом, вы не можете открыть его с помощью ifstream
Показать ещё 1 комментарий
Теги:
directory

2 ответа

1
Лучший ответ

Если вы хотите использовать DIRENT (метод unix) в окнах, посмотрите здесь, преимущество кросс-платформы (dirent почти везде, кроме окон):

http://www.softagalleria.net/dirent.php

Если вы хотите использовать Windows API для этого:

Как проверить, существует ли каталог с помощью C++ и winAPI

  • 0
    спасибо, использовал метод unix DIRENT, работал отлично!
0

Для портативной (на многих платформах) системы управления файлами вы можете использовать boost :: filesystem

Документация может выглядеть немного сложной для относительного новичка, но они, вероятно, дают вам примеры, которые позволят вам продолжать то, что вы хотите, и если вы застряли, вы всегда можете вернуться сюда и задать специфику.

Ваш существующий код неверен при использовании ifstream который используется для открытия файла только для чтения. Вы не можете использовать это, чтобы открыть каталог (чтобы просмотреть его содержимое или посмотреть, существует ли он).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню