55 / 56 / 34
Регистрация: 29.12.2012
Сообщений: 478
1

Реализовать поиск в указанном каталоге всех файлов во всех поддиректориях и сформировать XML в нужном формате

23.08.2016, 02:24. Показов 1232. Ответов 2
Метки нет (Все метки)

Задача:
Искать в указанном каталоге все файлы во всех поддиректориях и формировать XML в нужном формате.
XML записать в директорию рядом с программой.

Есть мысли по поводу с откуда начать?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.08.2016, 02:24
Ответы с готовыми решениями:

Реализовать поиск в указанном каталоге всех файлов во всех поддиректориях и сформировать XML в нужном формате
Искать в указанном каталоге все файлы во всех поддиректориях и формировать XML в нужном формате. ...

FindFirst. Поиск во всех поддиректориях, всех файлов
Не получается рекурсивно вызвать 1ую процедуру, почему-то только для первой папки ищет все файлы. ...

Запуск всех исполняемых файлов в указанном в каталоге
Запуск всех исполняемых файлов в указанном в каталоге. Каталог вводится в качестве параметра....

Скрипт: для всех файлов в указанном каталоге с расширением *.run, установить атрибут x
Как создать скрипт, который для всех файлов в указанном каталоге с расширением *.run, устанавливает...

2
4642 / 2155 / 272
Регистрация: 01.03.2013
Сообщений: 5,738
Записей в блоге: 22
23.08.2016, 06:32 2
Лучший ответ Сообщение было отмечено Черный мечник как решение

Решение

Начать с определения целевой платформы и ОС, где будет крутиться кот. Если нужно кроссвезде, то выяснить, есть ли страшные кутэшные или какие еще кроссплатформенные апишники для перебора файлов/каталогов. Если не кроссвезде - то взять апи выбранной ОС. С ХМЛ-ем определиться - использовать готовые либы для его формирования, писать свою общую функцию или частный рекурсивный велосипед с блек хедером и угловыми скобочками.

На винде без бустов и кутэ:
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
#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <fstream>
using namespace std;
 
ofstream out("test.xml");
 
void catalog2xml(LPCSTR n) {
    char dn[256]; strcpy(dn, n); strcat(dn, "\\*");
    out << "<Dir Name="" << n << "">\n";
 
    WIN32_FIND_DATAA f;
    HANDLE hf = FindFirstFileA(dn, &f);
    if(hf != INVALID_HANDLE_VALUE){
        do {
            LPCSTR fn = f.cFileName;
            if (!strcmp(fn, ".") || !strcmp(fn, "..")) continue;
 
            if(f.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
                strcpy(dn, n); strcat(dn, ""); strcat(dn, fn);
                catalog2xml(dn);
            } else {
                out << "<File>\n";
                out << "<Name>" << fn << "</Name>\n";
                out << "<Length>" << f.nFileSizeLow << "</Length>\n";
                out << "</File>\n";
            }       
        } while(FindNextFileA(hf, &f));
        FindClose(hf);
    }
    out << "</Dir>\n";
}
 
int _tmain(int argc, _TCHAR* argv[]) {
    if (!out) {cout << "Cannot open file.\n"; system("pause"); return 1;}
 
    out << "<?xml version="1.0" encoding="windows-1251"?>\n";
    catalog2xml("C:\\Users\\Ivana\\Documents\\Atmel Studio");
    out.close();
    return 0;
}
Кликните здесь для просмотра всего текста
XML
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
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
<?xml version="1.0" encoding="windows-1251"?>
<Dir Name="C:\Users\Ivana\Documents\Atmel Studio">
<Dir Name="C:\Users\Ivana\Documents\Atmel Studio\Asm_PID_Pendulum">
<Dir Name="C:\Users\Ivana\Documents\Atmel Studio\Asm_PID_Pendulum\Asm_PID_Pendulum">
<File>
<Name>Asm_PID_Pendulum.asm</Name>
<Length>3048</Length>
</File>
<File>
<Name>Asm_PID_Pendulum.asmproj</Name>
<Length>2541</Length>
</File>
<Dir Name="C:\Users\Ivana\Documents\Atmel Studio\Asm_PID_Pendulum\Asm_PID_Pendulum\Debug">
<File>
<Name>Asm_PID_Pendulum.hex</Name>
<Length>341</Length>
</File>
<File>
<Name>Asm_PID_Pendulum.lss</Name>
<Length>35030</Length>
</File>
<File>
<Name>Asm_PID_Pendulum.map</Name>
<Length>8529</Length>
</File>
<File>
<Name>Asm_PID_Pendulum.obj</Name>
<Length>841</Length>
</File>
<File>
<Name>Asm_PID_Pendulum.tmp</Name>
<Length>2349</Length>
</File>
</Dir>
<Dir Name="C:\Users\Ivana\Documents\Atmel Studio\Asm_PID_Pendulum\Asm_PID_Pendulum\Release">
</Dir>
</Dir>
<File>
<Name>Asm_PID_Pendulum.atsln</Name>
<Length>921</Length>
</File>
<File>
<Name>Asm_PID_Pendulum.atsuo</Name>
<Length>12288</Length>
</File>
</Dir>
<Dir Name="C:\Users\Ivana\Documents\Atmel Studio\Code Snippets">
</Dir>
<Dir Name="C:\Users\Ivana\Documents\Atmel Studio\Perevod">
<Dir Name="C:\Users\Ivana\Documents\Atmel Studio\Perevod\Perevod">
<Dir Name="C:\Users\Ivana\Documents\Atmel Studio\Perevod\Perevod\Debug">
<File>
<Name>makedep.mk</Name>
<Length>243</Length>
</File>
<File>
<Name>Makefile</Name>
<Length>3556</Length>
</File>
<File>
<Name>Perevod.d</Name>
<Length>47</Length>
</File>
<File>
<Name>Perevod.eep</Name>
<Length>34</Length>
</File>
<File>
<Name>Perevod.elf</Name>
<Length>74433</Length>
</File>
<File>
<Name>Perevod.hex</Name>
<Length>12020</Length>
</File>
<File>
<Name>Perevod.lss</Name>
<Length>51851</Length>
</File>
<File>
<Name>Perevod.map</Name>
<Length>105975</Length>
</File>
<File>
<Name>Perevod.o</Name>
<Length>6836</Length>
</File>
<File>
<Name>Perevod.srec</Name>
<Length>12828</Length>
</File>
</Dir>
<File>
<Name>Perevod.c</Name>
<Length>448</Length>
</File>
<File>
<Name>Perevod.cproj</Name>
<Length>5252</Length>
</File>
<File>
<Name>PerevodCpp.c</Name>
<Length>3948</Length>
</File>
</Dir>
<File>
<Name>Perevod.atsln</Name>
<Length>892</Length>
</File>
<File>
<Name>Perevod.atsuo</Name>
<Length>13824</Length>
</File>
</Dir>
<Dir Name="C:\Users\Ivana\Documents\Atmel Studio\Settings">
<Dir Name="C:\Users\Ivana\Documents\Atmel Studio\Settings\Atmel Studio">
<File>
<Name>CurrentSettings-2012-10-18.vssettings</Name>
<Length>103056</Length>
</File>
</Dir>
</Dir>
<Dir Name="C:\Users\Ivana\Documents\Atmel Studio\StartPages">
</Dir>
<Dir Name="C:\Users\Ivana\Documents\Atmel Studio\Svetofor">
<Dir Name="C:\Users\Ivana\Documents\Atmel Studio\Svetofor\Svetofor">
<Dir Name="C:\Users\Ivana\Documents\Atmel Studio\Svetofor\Svetofor\Debug">
<File>
<Name>Svetofor.hex</Name>
<Length>251</Length>
</File>
<File>
<Name>Svetofor.lss</Name>
<Length>32978</Length>
</File>
<File>
<Name>Svetofor.map</Name>
<Length>8393</Length>
</File>
<File>
<Name>Svetofor.obj</Name>
<Length>673</Length>
</File>
<File>
<Name>Svetofor.tmp</Name>
<Length>1814</Length>
</File>
</Dir>
<Dir Name="C:\Users\Ivana\Documents\Atmel Studio\Svetofor\Svetofor\Release">
</Dir>
<File>
<Name>Svetofor.asm</Name>
<Length>2318</Length>
</File>
<File>
<Name>Svetofor.asmproj</Name>
<Length>2380</Length>
</File>
</Dir>
<File>
<Name>Svetofor.atsln</Name>
<Length>897</Length>
</File>
<File>
<Name>Svetofor.atsuo</Name>
<Length>10240</Length>
</File>
</Dir>
<Dir Name="C:\Users\Ivana\Documents\Atmel Studio\Templates">
<Dir Name="C:\Users\Ivana\Documents\Atmel Studio\Templates\ItemTemplates">
</Dir>
<Dir Name="C:\Users\Ivana\Documents\Atmel Studio\Templates\ProjectTemplates">
</Dir>
</Dir>
</Dir>

В браузере ХМЛ нормально отображается, с уровнями иерархии.
0
825 / 249 / 34
Регистрация: 27.07.2016
Сообщений: 497
Записей в блоге: 1
23.08.2016, 07:50 3
Вывод "дерева". Остальное сами
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
#include <iostream>
#include <fstream>//???
#include <string>
#include <iomanip>
#include <experimental/filesystem>
 
 
 
int main()
{
    namespace fs = std::experimental::filesystem;
    using recDirIter = fs::recursive_directory_iterator;
    std::ostream& os = std::cout;
 
    auto outLineToStream = [&os](const std::string &message, int depth)
        {
            os << std::setw(depth * 3) << "" << message << "\n";
        };
 
    fs::path beginPath(fs::u8path("."));
    int lastDepth = 0;
 
    for(recDirIter begin(beginPath), end; begin != end; ++begin)
    {
        int depth = begin.depth();
 
        if(depth < lastDepth)
        {
            outLineToStream("</Directory>", depth);
        }
 
        if(fs::is_directory(begin->status()))
        {
            outLineToStream("<Directory name="" + std::string(begin->path().filename()) + "">", depth);
        }
        else
        {
            os << std::setw(depth * 3) << "" << "<File>" << std::string(begin->path().filename()) << "</File>\n";
        }
 
        lastDepth = depth;
    }
}
Кликните здесь для просмотра всего текста
Код
<File>Makefile</File>
<File>FileSystemCPP17.cbp</File>
<File>PROJECT_NAME</File>
<Directory name="CMakeFiles">
   <Directory name="CMakeTmp">
   <Directory name="3.5.2">
      <Directory name="CompilerIdCXX">
         <File>CMakeCXXCompilerId.cpp</File>
         <File>a.out</File>
      </Directory>
      <File>CMakeCCompiler.cmake</File>
      <File>CMakeSystem.cmake</File>
      <File>CMakeDetermineCompilerABI_C.bin</File>
      <File>CMakeCXXCompiler.cmake</File>
      <File>CMakeDetermineCompilerABI_CXX.bin</File>
      <Directory name="CompilerIdC">
         <File>CMakeCCompilerId.c</File>
         <File>a.out</File>
   </Directory>
   <File>feature_tests.c</File>
   <File>CMakeDirectoryInformation.cmake</File>
   <Directory name="FileSystemCPP17.dir">
      <File>depend.make</File>
      <File>link.txt</File>
      <File>cmake_clean.cmake</File>
      <File>build.make</File>
      <File>DependInfo.cmake</File>
      <File>flags.make</File>
      <File>progress.make</File>
   </Directory>
   <Directory name="PROJECT_NAME.dir">
      <File>depend.make</File>
      <File>CXX.includecache</File>
      <File>link.txt</File>
      <File>depend.internal</File>
      <File>cmake_clean.cmake</File>
      <File>main.cpp.o</File>
      <File>build.make</File>
      <File>DependInfo.cmake</File>
      <File>flags.make</File>
      <File>progress.make</File>
   </Directory>
   <File>TargetDirectories.txt</File>
   <File>progress.marks</File>
   <File>CMakeOutput.log</File>
   <File>feature_tests.cxx</File>
   <File>cmake.check_cache</File>
   <File>Makefile2</File>
   <File>Makefile.cmake</File>
   <File>feature_tests.bin</File>
</Directory>
<File>cmake_install.cmake</File>
<File>CMakeCache.txt</File>
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.08.2016, 07:50

Заменить в указанном каталоге в расширениях всех имен файлов, удовлетворяющих заданному шаблону, последнюю букву на р
Написать командный файл, который заменяет в указанном каталоге в расширениях всех имен файлов,...

Поиск всех файлов в каталоге, имеющих атрибут R и H
Нужно организовать поиск всех файлов в каталоге, имеющих атрибут R и H и записать их пути в новый...

Поиск, отслеживание и копирование всех файлов в каталоге
Доброе время суток, ребята может кто поможет или сделает программу которая сначала поищет всех...

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.