#c #directory
#c #каталог
Вопрос:
Здравствуйте, я программирую с использованием блока кода с использованием C , все, что я хочу, это использовать opendir дважды, и он открывается только после того, как оба фрагмента кода работают, но работает только верхний, а не нижний. Пожалуйста, кто-нибудь, помогите мне, одновременно работает только один каталог: я хочу, DIR
чтобы он работал, и дайте мне значения для перехода к другому каталогу и получения значений.
int main()
{ std::string EmployeeNumbr[1000];
std::string DocumentName[1000];
std::string Path = "C:\EmpFiles\";
int f;
int j;
DIR *dir;
struct dirent * file;
Комментарии:
1. Как вы определили, что нижний блок кода не «работает»? Каково ожидаемое и фактическое поведение? Вы включили предупреждения компилятора? Ваш компилятор должен кричать на вас, что
f
иj
используется неинициализированным.2. Вам также следует использовать более безопасные структуры данных C , такие как векторы и std::filesystem API.
3. Я использую оба каталога один за другим, и они работают отдельно, когда собраны вместе, работает только один сверху. Обратите внимание, что есть два каталога, и оба копируют directry из Windows.
4. Все это уже упаковано,
std::filesystem
чтобы обеспечить стандартизированный способ перебора записей каталога и даже выполнения его рекурсивно . Если вы хотите использоватьopendir
,readdir
иclosedir
, упакуйте их в класс, чтобы упростить использование: пример
Ответ №1:
Вы используете f
и j
неинициализированы. Поскольку f
это, вероятно, работает случайно, поскольку стек все еще относительно свежий.
Однако к моменту начала использования j
стек был полностью загрязнен, и ваше неинициализированное использование возвращает случайный мусор стека.
Любой мало-мальски приличный компилятор должен кричать на вас, если вы это сделаете, поэтому, пожалуйста, выясните, как обновить уровни предупреждений (либо -Wall -Wextra -pedantic
в GCC / Clang, либо -W4
в MSVC)