Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Найти файл с самым длинным именем рекурсией 
:(
    Опции темы
zeitgeistz
Дата 3.6.2013, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Awaiting Authorisation
Сообщений: 36
Регистрация: 23.4.2013

Репутация: нет
Всего: нет



Здравствуйте, программа должна найти файл с самым длинным именем и вывести полностью путь к этому файлу. 
Ниже код, который после компиляции не выводит ничего, в чём ошибка?

Код

#include <cstdlib>
#include <iostream>

using namespace std;

#include <string.h>
#include <dirent.h>
#include <stdlib.h>
#include <stdio.h>

void PrintThebiggestFileLocation(char const*StartDir, char const*FileName);

int main (void)
{
    char fname[256]="1.txt", dirname[256]="./";
    PrintThebiggestFileLocation (dirname, fname);
    return 0;
}

void PrintThebiggestFileLocation (char const*StartDir, char const*FileName)
{
    DIR    *dp = opendir (StartDir);

    if (dp == NULL)
    {
        return ;
    }
    else
    {
        struct dirent *ep;
        while (ep = readdir (dp))
        {
            if( strcmp(ep->d_name, "." ) ==0 || strcmp(ep->d_name, ".." ) ==0)
                continue;
        // Проверяем каждый элемент из папки и , если его имя
        // больше, чем FileName, заносим его в max
            if (strcmp(FileName, ep->d_name)==1) // если d_name больше filename
            {
                char *max = strcpy (max, ep -> d_name);
                printf("%s\\%s\n", StartDir, max);
            }


        // Вывод пути
            char *newDir=(char*) malloc(sizeof(char)*(strlen(StartDir)+strlen(ep->d_name)+2));
            strcpy(newDir, StartDir);
            strcat(newDir, "\\");
            strcat(newDir, ep->d_name);
            PrintThebiggestFileLocation (newDir, FileName);
            free(newDir);
        }
        closedir (dp);
    }
}



Это сообщение отредактировал(а) zeitgeistz - 3.6.2013, 21:51
PM   Вверх
feodorv
Дата 4.6.2013, 08:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(zeitgeistz @  3.6.2013,  22:50 Найти цитируемый пост)
            if (strcmp(FileName, ep->d_name)==1) // если d_name больше filename

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

Цитата(zeitgeistz @  3.6.2013,  22:50 Найти цитируемый пост)
                char *max = strcpy (max, ep -> d_name);

Это самоубийство. Не дай Бог strcmp вернёт 1, программе будет очень плохо...
И имя файла, и имя директории нужно сохранять во внешних по отношению к подпрограмме PrintThebiggestFileLocation переменных.
И сравнивать нужно с max (максимальным именем), а не постоянно с одним и тем же char const*FileName.

Цитата(zeitgeistz @  3.6.2013,  22:50 Найти цитируемый пост)
    char fname[256]="1.txt"

А если в директории всего один файл с именем "1", то он уже не будет файлом с самым длинным именем?


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
zeitgeistz
Дата 4.6.2013, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Awaiting Authorisation
Сообщений: 36
Регистрация: 23.4.2013

Репутация: нет
Всего: нет



Всё, я разобрался. Спасибо большое!

Это сообщение отредактировал(а) zeitgeistz - 4.6.2013, 15:40
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0421 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.