С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
4 / 4 / 1
Регистрация: 25.10.2012
Сообщений: 218
1

Получить вывод Dir в программу

10.03.2016, 18:45. Показов 2504. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Необходимо сделать программу, которая будет принимать на вход команды Linux'a, а исполнять их под Windows.
Т.е., например ввел я ls, а выполняется dir.
Так вот, считываю я строку написанную пользователем в консоль, разбиваю на слова, беру 1-ое слово и проверяю, если это ls, то вызываю dir. Но мне нужно всю информацию от Dir получить не в консоль, а в мою программу, обработать её как мне надо, а потом уже вывести.
Вызываю Dir я вот так
C++
1
2
3
4
5
string str = params[0];
    if (str == "ls")
    {
        system("Dir");
    }
Как можно реализовать это?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.03.2016, 18:45
Ответы с готовыми решениями:

Поиск файлов и вывод как в каталоге DIR
Есть задача-в папке-- D:\users лежат файлы формата-- *.txt Через поиск нужно вывести на экран...

DIR-100+DIR-300= &%#@@#%!$ как же так?
Всем доброго времени суток. Прошу помочь мне в моей проблеме с двумя роутерами в одной сети. дело в...

D-link DIR-825 и DIR-620 как подключить?
Добрый день! Подскажите пожалуйста как подключить DIR-620D1 с прошивкой 2.5.15 как точка доступа к...

DIR-300 или DIR-615 что лучше?
Заказал два маршрутизатора только забрать надо один. Какой на ваш взгляд лучше?

2
Эксперт С++
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
10.03.2016, 18:50 2
Цитата Сообщение от xAndeRx Посмотреть сообщение
Как можно реализовать это?
http://rextester.com/EJDIG92610

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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
// пример рекурсивного обхода в глубину
// дерева каталогов
 
// при этом используются два способа:
// 1. рекурсивный вызов функций
// 2. цикл с использованием стека
 
// =====================================================================
// =====================================================================
 
#include <thread>
 
 
typedef uint64_t MicroSeconds;
 
// вернет промежуток времени в микросекундах
// с момента последнего запуска этого же метода
MicroSeconds QuantMS()
{
    typedef std::chrono::microseconds 
        MSec;
    typedef std::chrono::high_resolution_clock
        Clock;
 
    static Clock::time_point last;
    
    const Clock::time_point now 
        = Clock::now();
    
    const auto result 
        = std::chrono::duration_cast<MSec>(now - last);
 
    last = now;
    
    return static_cast<MicroSeconds>(result.count());
}
 
// =====================================================================
// =====================================================================
 
#include <stack>
#include <iostream>
#include <boost/filesystem.hpp>
 
 
namespace fs = boost::filesystem;
typedef fs::directory_iterator 
    iter;
 
const size_t max_depth = 20;
 
 
// расскоментируйте этот дефайн,
// что бы активировать показ 
// дополнительной информации
#define dVIEW
 
#ifdef dVIEW
void view(const char* desc, const fs::path& cur, const size_t depth)
{
    std::cout 
        << "["<< depth << "][" << desc <<"]" << std::string(depth*2, ' ') << cur << std::endl;
}
#else
void view(const char* desc, const fs::path&, const size_t){}
#endif
 
size_t recursieve(const fs::path& start, const size_t depth = 0)
{
    if(depth>=max_depth)
        return 0;
    
    size_t found = 0;
    for(iter it(start); it != iter(); ++it)
    {
        try
        {
            const fs::path& cur = *it;
            if (fs::is_directory(cur))
                view("[dir]", cur, depth),
                found += recursieve(cur, depth + 1) + 1;
            else
                view("[file]", cur, depth);
        }
        catch (const fs::filesystem_error& ex){ std::cout << ex.what() << '\n'; }
    }
    return found;
}
 
 
size_t loop(const fs::path& start, size_t depth = 0)
{
    std::stack<iter>
        mystack;
 
    size_t found = 0;
    mystack.emplace(start);
 
    while (!mystack.empty() && depth < max_depth)
    {
        auto& it = mystack.top();
 
        if(it == iter())
        {
            mystack.pop();
            --depth;
            continue;
        }
 
        for (; it != iter(); ++it)
        {
            try
            {
                const fs::path& cur = *it;
                if (fs::is_directory(cur))
                {
                    view("dir", cur, depth);
                    mystack.emplace(cur);
                    ++it;
                    ++depth;
                    ++found;
                    break;
                }
                else
                    view("file", cur, depth);
            }
            catch (const fs::filesystem_error& ex) { std::cout << ex.what() << '\n'; }
        }
    }
    return found;
}
 
 
void view_statistic(const fs::path& p, const char* desc, size_t scan(const fs::path&, size_t) )
{
    
    std::cout << "method: "<< desc << std::endl
        << "started from: " << p << std::endl;
    
    QuantMS();
    const auto found   = scan(p, 0);
    const auto elapsed = QuantMS();
    
    std::cout << "total found directories: "
        << found << std::endl;
    
    std::cout << "time: " << elapsed << " microseconds ("
        << elapsed/1000000.0 <<" seconds)\n\n\n";
}
 
int main()
{
    fs::path p = (fs::current_path()/"../../..");
    p.normalize();
    
    //std::cout << "started from: " << p << std::endl;
    
    view_statistic(p, "loop",       loop);
    view_statistic(p, "recursieve", recursieve);
}
http://en.cppreference.com/w/cpp/experimental/fs
https://msdn.microsoft.com/ru-... 74694.aspx

кроме того, под виндой к вашим услугам winapi.
но лучше сразу привыкать к хорошему.
filesystem удобна, и содержит все,
что только может понадобиться
для работы с файловой системой.
1
4 / 4 / 1
Регистрация: 25.10.2012
Сообщений: 218
11.03.2016, 00:54  [ТС] 3
hoggy, благодарю.
А не подскажите, есть ли в DIR альтернатива команде Linux ls /p
Эта команда выводит все подкаталоги и файлы текущего каталога, и если это папка в конце его имени ставит символ "/".
Скрин прикрепил ниже.
Миниатюры
Получить вывод Dir в программу  
0
11.03.2016, 00:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.03.2016, 00:54
Помогаю со студенческими работами здесь

Как соединить патч-кордом 2 роутера DIR-300NRUB5 и DIR 615 чтобы расширить зону wi-fi?
сейчас попробую найти их ревизии и отпишу но ревизии плохие по вай-фаю мост не вышел заодно...

D-Link DIR-300 vs DIR-320NRU
Вопщем та тема наверное сразу для 3-х разделов форума, но спрошу тут. Был DIR-300, все прекрасно...

Найти директории path/dir, рядом с которыми есть файлы path/dir.png
Добрый день. Появилась задача следующего вида. На диске есть директории (назовём полные пути к...

D-Link DIR-615s в режиме клиента (приём интернета от D-Link DIR-300)
Доброго времени суток форумчане! Прошу о помощи. Имеется стационарный компьютер с подключенным к...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru