Форум программистов, компьютерный форум CyberForum.ru

Поиск самого длинного пути расположения файла - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Распечатать в порядке убывания нечетные числа http://www.cyberforum.ru/cpp-beginners/thread873313.html
Распечатать в порядке убывания нечётные числа из диапазона (5..90) , кратные 3 и не кратные 5 одновременно
C++ дружественный тестовый класс В функции «main», сначала должна запускаться интегральная функция тестирования (статическая функция«bool testAutomatic()» тестового класса), а затем процедура интерактивного тестирования(статическая функция«bool testInteractive()» тестового класса). Как они будут выглядеть??? Как их записать?? http://www.cyberforum.ru/cpp-beginners/thread873307.html
C++ Упорядочить массив (Закомментировать)
помогите Закомментировать пожалуйста) #include <iostream> #include <conio.h> #include <clocale> using namespace std; int main() { setlocale (LC_ALL, "Russian"); int a,b,t,n; int *arr;
Представить комплексное число А + Bi (А, В — вещественные) в тригонометрическом виде C++
Представить комплексное число А + Bi (А, В — вещественные) в тригонометрическом виде.
C++ базисные циклы на графе http://www.cyberforum.ru/cpp-beginners/thread873284.html
Нужно реализовать алгоритм нахождение базисных циклов на графе Люди добрые, помогите
C++ Именование новых объектов Доброго времени суток. Это, вероятно, простой вопрос, но в лабах и учебниках пока ответа на него не встретил. Допустим, я создаю класс, с неизвестным заранее количеством объектов, и мне нужна возможность, чтобы пользователь в консольном приложении мог добавлять новые объекты. До сих пор, во всех примерах что я видел, новый объект создается и именуется в коде программы, ну, то есть примерно... подробнее

Показать сообщение отдельно
schdub
2933 / 1277 / 235
Регистрация: 19.01.2009
Сообщений: 3,321
Завершенные тесты: 1
21.05.2013, 20:03     Поиск самого длинного пути расположения файла
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <stdlib.h>
#include <stdio.h>
#include <dirent.h>
#include <string.h>
 
#define DIR_SEPARATOR "\\"   // разделитель директорий в Windows "\\" в *nix "/"
#define MAXIMUM_PATH  260    // макс кол-во символов в пути
 
// структура для хранения информации о текущем максимальном пути
struct MaxPathFinder_ctx {
    unsigned maxPathLen;
    char maxPath[MAXIMUM_PATH];
};
 
void PrintFileLocations(char const * StartDir, char const * FileName, struct MaxPathFinder_ctx * ctx) {
    DIR    *dp = opendir (StartDir);// StartDir это тоже самое что и dirname,
                                    // а DIR    *dp = opendir (StartDir) значит открыть папку StartDir
// Граничное условие: если StartDir это не папка,
// то нет в ней файлов с именем FileName
    if (dp == NULL) {
        return;
    }
 
    struct dirent *ep;
    char newDir[MAXIMUM_PATH]; // переместили в стековую память
    // вычисляем один раз, вместо выполнения на каждой итерации цикла
    strncpy(newDir, StartDir, MAXIMUM_PATH - 1);
    strcat(newDir, DIR_SEPARATOR);
    int startDirLen = strlen(StartDir);
    int currentLen = 0;
    char * ptrToAdd = &newDir[startDirLen + 1]; // чтобы сократить кол-во операций копирования
 
    while (ep = readdir (dp)) {
        if (strcmp(ep->d_name, ".") == 0 || strcmp(ep->d_name, "..") ==0) {
            continue;
        }
        // копируем только имя вновь найденного элемента и 
        // подсчитываем кол-во символов в пути
        strcpy(ptrToAdd, ep->d_name);
        currentLen = startDirLen + strlen(ep->d_name) + 1;
        if (ctx->maxPathLen < currentLen) {
            // если их больше, то копируем в контекст текущий путь
            ctx->maxPathLen = currentLen;
            strcpy(ctx->maxPath, newDir);
        }
 
        // FIXME: не понял из задания нужно ли это убрать?
        // Проверяем каждый элемент из папки и , если его имя
        // совпало с FileName - выводим путь и увеличиваем счётчик
        if (strcmp(FileName, ep->d_name)==0) {
            printf("%s\n", newDir);
        }
        
        // Рекурсивно ищем, предполагая, что данный элемент является папкой
        PrintFileLocations(newDir, FileName, ctx);
    }
    closedir (dp);
}
 
int main(int argc, char *argv[]) {
    struct MaxPathFinder_ctx ctx;
    char fname[MAXIMUM_PATH];
    char dirname[MAXIMUM_PATH];
 
    memset(&ctx, 0, sizeof(ctx));
    strcpy(fname, "1.txt");         // имя файла, для которого нужно выводить полный путь
    strcpy(dirname, "c:\\test");    // директория в которой начинаем поиск
 
    PrintFileLocations(dirname, fname, &ctx);
    
    if (ctx.maxPath[0]) {
        printf("Max path is '%s', contains %d chars.\n", ctx.maxPath, ctx.maxPathLen);
    } else {
        printf("Empty path.\n");
    }
    
    return EXIT_SUCCESS;
}
 
Текущее время: 16:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru