Заблокирован

Как выполнить поиск файлов в папке и подпапках, и подподпапках, и т.д.?

09.10.2011, 00:48. Показов 4364. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!

Как выполнить поиск файлов в папке и подпапках, и подподпапках, и т.д.?

В поисковики не посылать: был, то что нашел, не заработало.

Буду очень благодарен за подробный код с комментами

Зараннее спасибо!


Добавлено через 18 минут
Ответьте кто-нибудь, плиз
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.10.2011, 00:48
Ответы с готовыми решениями:

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

Поиск файлов форматов pdf, jpg, png в папке и подпапках
Доброго дня господа! Подскажите мне пожалуйста, как мне можно найти файлы форматов в папке и под папках не зная точного имени файла. ...

Поиск в папке и подпапках файлов, созданных или измененных за определенную дату
Есть папка(D:\wscom). В ней лежат файлы, папки, подпапки. на форме текстовое поле(для ввода даты за которую необходимо осуществить...

18
545 / 344 / 12
Регистрация: 05.11.2010
Сообщений: 1,076
Записей в блоге: 1
09.10.2011, 03:53
Все спят.
Рекурсивный поиск надо делать )

Добавлено через 27 минут
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
void search(System::IO::DirectoryInfo ^dirInfo, System::String ^what);
 
void search(System::IO::DirectoryInfo ^dirInfo, System::String ^what) {
    //  Получаем массив информации о файлах, удовлетворяющих шаблону
    cli::array<System::IO::FileInfo ^> ^filesInfo = dirInfo->GetFiles(what);
 
    //  Печатаем все найденные имена
    for each(System::IO::FileInfo ^f in filesInfo) {
        Console::WriteLine(f->FullName);
    }
 
    //  Получаем список поддиректорий, чьи имена содержат искомый шаблон
    cli::array<System::IO::DirectoryInfo ^> ^dirsMatchedInfo = dirInfo->GetDirectories(what);
    //  Выводим
    for each(System::IO::DirectoryInfo ^d in dirsMatchedInfo) {
        Console::WriteLine(d->FullName);
    }
 
    //  Получаем список всех поддиректорий
    cli::array<System::IO::DirectoryInfo ^> ^dirsInfo = dirInfo->GetDirectories();
    //  Во всех поддиректориях
    for each(System::IO::DirectoryInfo ^d in dirsInfo) {
        //  Собственно рекурсия
        search(d, what);
    }
}
 
int main(array<System::String ^> ^args)
{
    System::String ^searchPath = L"C:\\";
    System::String ^searchWhat = L"shared*";
    System::IO::DirectoryInfo ^dirInfo = System::IO::Directory::CreateDirectory(searchPath);
 
    search(dirInfo, searchWhat);
    return 0;
}
К примеру так. Можно вообще элементарно:
C++
1
2
3
4
    cli::array<System::IO::FileInfo ^> ^filesInfo = dirInfo->GetFiles(what, System::IO::SearchOption::AllDirectories);
    for each(System::IO::FileInfo ^f in filesInfo) {
        Console::WriteLine(f->FullName);
    }
Но этот вариант будет выводить результаты лишь после того, как слазит во все поддиректории. В случае корня диска искать будет долго, я лично на своем ноуте результата сейчас так и не дождался за пару минут.
А первый вариант пообъемнее, но будет выводить сразу.
2
Заблокирован
17.10.2011, 23:46  [ТС]
Цитата Сообщение от Герц Посмотреть сообщение
Все спят.
Рекурсивный поиск надо делать )


Но этот вариант будет выводить результаты лишь после того, как слазит во все поддиректории. В случае корня диска искать будет долго, я лично на своем ноуте результата сейчас так и не дождался за пару минут.
А первый вариант пообъемнее, но будет выводить сразу.
Спасибо большое, вроде получилось
0
Заблокирован
30.10.2011, 18:57  [ТС]
Когда пробую выполнить поиск файлов указанным выше методом, то программа запускается, и функция, вроде, вызывается, но поиска файлов не происходит В чем я на косячил?

объявляю функцию

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
#pragma region Windows Form Designer generated code
        /// <summary>
        /// Обязательный метод для поддержки конструктора - не изменяйте
        /// содержимое данного метода при помощи редактора кода.
        /// </summary>
        void InitializeComponent(void)
        {
            System::ComponentModel::ComponentResourceManager^  resources = (gcnew System::ComponentModel::ComponentResourceManager(Playlist::typeid));
            this->LV1 = (gcnew System::Windows::Forms::ListView());
            this->CH1 = (gcnew System::Windows::Forms::ColumnHeader());
            this->CH2 = (gcnew System::Windows::Forms::ColumnHeader());
            this->CH3 = (gcnew System::Windows::Forms::ColumnHeader());
            this->CH4 = (gcnew System::Windows::Forms::ColumnHeader());
            this->CH5 = (gcnew System::Windows::Forms::ColumnHeader());
            this->CH6 = (gcnew System::Windows::Forms::ColumnHeader());
            this->pAddF = (gcnew System::Windows::Forms::PictureBox());
            this->pAddFSel = (gcnew System::Windows::Forms::PictureBox());
            this->FBD1 = (gcnew System::Windows::Forms::FolderBrowserDialog());
            this->pFAdd = (gcnew System::Windows::Forms::PictureBox());
            this->pFAddSel = (gcnew System::Windows::Forms::PictureBox());
            (cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->pAddF))->BeginInit();
            (cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->pAddFSel))->BeginInit();
            (cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->pFAdd))->BeginInit();
            (cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->pFAddSel))->BeginInit();
            this->SuspendLayout();
            // 
            // LV1
            // 
            this->LV1->BackColor = System::Drawing::Color::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(64)), static_cast<System::Int32>(static_cast<System::Byte>(64)), 
                static_cast<System::Int32>(static_cast<System::Byte>(64)));
            this->LV1->BorderStyle = System::Windows::Forms::BorderStyle::None;
            this->LV1->Columns->AddRange(gcnew cli::array< System::Windows::Forms::ColumnHeader^  >(6) {this->CH1, this->CH2, this->CH3, 
                this->CH4, this->CH5, this->CH6});
            this->LV1->ForeColor = System::Drawing::Color::WhiteSmoke;
            this->LV1->Location = System::Drawing::Point(0, 0);
            this->LV1->Name = L"LV1";
            this->LV1->Size = System::Drawing::Size(382, 501);
            this->LV1->TabIndex = 0;
            this->LV1->UseCompatibleStateImageBehavior = false;
            this->LV1->View = System::Windows::Forms::View::Details;
            this->LV1->DrawItem += gcnew System::Windows::Forms::DrawListViewItemEventHandler(this, &Playlist::LV1_DrawItem);
            this->LV1->DrawSubItem += gcnew System::Windows::Forms::DrawListViewSubItemEventHandler(this, &Playlist::LV1_DrawSubItem);
            this->LV1->ItemCheck += gcnew System::Windows::Forms::ItemCheckEventHandler(this, &Playlist::LV1_ItemCheck);
            // 
            // CH1
            // 
            this->CH1->Text = L"";
            this->CH1->Width = 26;
            // 
            // CH2
            // 
            this->CH2->Text = L"Название трека";
            this->CH2->Width = 146;
            // 
            // CH3
            // 
            this->CH3->Text = L"Исполнитель";
            this->CH3->Width = 83;
            // 
            // CH4
            // 
            this->CH4->Text = L"Время";
            this->CH4->Width = 53;
            // 
            // CH5
            // 
            this->CH5->Text = L"Альбом";
            this->CH5->Width = 74;
            // 
            // CH6
            // 
            this->CH6->Text = L"Адрес";
            this->CH6->Width = 600;
            // 
            // pAddF
            // 
            this->pAddF->BackColor = System::Drawing::Color::Transparent;
            this->pAddF->Image = (cli::safe_cast<System::Drawing::Image^  >(resources->GetObject(L"pAddF.Image")));
            this->pAddF->InitialImage = (cli::safe_cast<System::Drawing::Image^  >(resources->GetObject(L"pAddF.InitialImage")));
            this->pAddF->Location = System::Drawing::Point(10, 504);
            this->pAddF->Name = L"pAddF";
            this->pAddF->Size = System::Drawing::Size(48, 48);
            this->pAddF->TabIndex = 1;
            this->pAddF->TabStop = false;
            this->pAddF->MouseEnter += gcnew System::EventHandler(this, &Playlist::pAddF_MouseEnter);
            // 
            // pAddFSel
            // 
            this->pAddFSel->BackColor = System::Drawing::Color::Transparent;
            this->pAddFSel->Image = (cli::safe_cast<System::Drawing::Image^  >(resources->GetObject(L"pAddFSel.Image")));
            this->pAddFSel->InitialImage = (cli::safe_cast<System::Drawing::Image^  >(resources->GetObject(L"pAddFSel.InitialImage")));
            this->pAddFSel->Location = System::Drawing::Point(10, 504);
            this->pAddFSel->Name = L"pAddFSel";
            this->pAddFSel->Size = System::Drawing::Size(48, 48);
            this->pAddFSel->TabIndex = 2;
            this->pAddFSel->TabStop = false;
            this->pAddFSel->Visible = false;
            this->pAddFSel->Click += gcnew System::EventHandler(this, &Playlist::pAddFSel_Click);
            this->pAddFSel->MouseLeave += gcnew System::EventHandler(this, &Playlist::pAddFSel_MouseLeave);
            // 
            // FBD1
            // 
            this->FBD1->Description = L"Укажите папку с музыкой:";
            this->FBD1->ShowNewFolderButton = false;
            // 
            // pFAdd
            // 
            this->pFAdd->BackColor = System::Drawing::Color::Transparent;
            this->pFAdd->Image = (cli::safe_cast<System::Drawing::Image^  >(resources->GetObject(L"pFAdd.Image")));
            this->pFAdd->InitialImage = (cli::safe_cast<System::Drawing::Image^  >(resources->GetObject(L"pFAdd.InitialImage")));
            this->pFAdd->Location = System::Drawing::Point(64, 504);
            this->pFAdd->Name = L"pFAdd";
            this->pFAdd->Size = System::Drawing::Size(48, 48);
            this->pFAdd->TabIndex = 3;
            this->pFAdd->TabStop = false;
            this->pFAdd->MouseEnter += gcnew System::EventHandler(this, &Playlist::pFAdd_MouseEnter);
            //
            // search
            //
            void search(System::IO::DirectoryInfo ^dirInfo, System::String ^what);
            // 
            // pFAddSel
            // 
            this->pFAddSel->BackColor = System::Drawing::Color::Transparent;
            this->pFAddSel->Image = (cli::safe_cast<System::Drawing::Image^  >(resources->GetObject(L"pFAddSel.Image")));
            this->pFAddSel->InitialImage = (cli::safe_cast<System::Drawing::Image^  >(resources->GetObject(L"pFAddSel.InitialImage")));
            this->pFAddSel->Location = System::Drawing::Point(64, 504);
            this->pFAddSel->Name = L"pFAddSel";
            this->pFAddSel->Size = System::Drawing::Size(48, 48);
            this->pFAddSel->TabIndex = 4;
            this->pFAddSel->TabStop = false;
            this->pFAddSel->Visible = false;
            this->pFAddSel->Click += gcnew System::EventHandler(this, &Playlist::pFAddSel_Click);
            this->pFAddSel->MouseLeave += gcnew System::EventHandler(this, &Playlist::pFAddSel_MouseLeave);
            // 
            // Playlist
            // 
            this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->BackColor = System::Drawing::Color::Black;
            this->ClientSize = System::Drawing::Size(384, 562);
            this->Controls->Add(this->pFAddSel);
            this->Controls->Add(this->pFAdd);
            this->Controls->Add(this->pAddFSel);
            this->Controls->Add(this->pAddF);
            this->Controls->Add(this->LV1);
            this->Name = L"Playlist";
            this->Text = L"Плейлист";
            this->Load += gcnew System::EventHandler(this, &Playlist::Playlist_Load);
            this->ControlAdded += gcnew System::Windows::Forms::ControlEventHandler(this, &Playlist::Playlist_ControlAdded);
            this->Resize += gcnew System::EventHandler(this, &Playlist::Playlist_Resize);
            (cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->pAddF))->EndInit();
            (cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->pAddFSel))->EndInit();
            (cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->pFAdd))->EndInit();
            (cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->pFAddSel))->EndInit();
            this->ResumeLayout(false);
 
        }
вырезку из кода привел, чтобы было видно, где объявляю.

вызываю

C++
1
2
3
4
5
6
7
8
9
10
private: System::Void pFAddSel_Click(System::Object^  sender, System::EventArgs^  e) {
              System::Windows::Forms::DialogResult result = FBD1->ShowDialog();
              if ( result == System::Windows::Forms::DialogResult::OK ) {
                  System::String ^searchPath = FBD1 -> SelectedPath;
                  System::String ^searchWhat = L"\*";
                  System::IO::DirectoryInfo ^dirInfo = System::IO::Directory::CreateDirectory(searchPath);
 
                  search(dirInfo, searchWhat);
              }
         }
сама функция

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
         // search of files
 
void search(System::IO::DirectoryInfo ^dirInfo, System::String ^what) {
        //      Получаем массив информации о файлах, удовлетворяющих шаблону
        cli::array<System::IO::FileInfo ^> ^filesInfo = dirInfo->GetFiles(what);
 
        //      Печатаем все найденные имена
        for each(System::IO::FileInfo ^f in filesInfo) {
                Console::WriteLine(f->FullName);
        }
 
        //      Получаем список поддиректорий, чьи имена содержат искомый шаблон
        cli::array<System::IO::DirectoryInfo ^> ^dirsMatchedInfo = dirInfo->GetDirectories(what);
        //      Выводим
        for each(System::IO::DirectoryInfo ^d in dirsMatchedInfo) {
            [B]Playlist::LV1->Items->Add(d->FullName);;[/B] //заношу результат в listview
        }
 
        //      Получаем список всех поддиректорий
        cli::array<System::IO::DirectoryInfo ^> ^dirsInfo = dirInfo->GetDirectories();
        //      Во всех поддиректориях
        for each(System::IO::DirectoryInfo ^d in dirsInfo) {
                //      Собственно рекурсия
                search(d, what);
}
}

Добавлено через 3 часа 16 минут
Ответьте, пожалуйста, кто-нибудь
0
545 / 344 / 12
Регистрация: 05.11.2010
Сообщений: 1,076
Записей в блоге: 1
30.10.2011, 20:02
Небось строку с запросом неверно записываешь, там звездочка нужна на конце.
1
Заблокирован
30.10.2011, 21:01  [ТС]
Цитата Сообщение от Герц Посмотреть сообщение
Небось строку с запросом неверно записываешь, там звездочка нужна на конце.
Так есть же звездочка?! *.* тоже не работает
0
545 / 344 / 12
Регистрация: 05.11.2010
Сообщений: 1,076
Записей в блоге: 1
30.10.2011, 22:04
Дай мне *.cpp-шник от консольного C++/CLI приложения, чтобы я сам не собирал эти куски воедино, я посмотрю и попробую найти ошибку.
1
Заблокирован
31.10.2011, 23:36  [ТС]
Цитата Сообщение от Герц Посмотреть сообщение
Дай мне *.cpp-шник от консольного C++/CLI приложения, чтобы я сам не собирал эти куски воедино, я посмотрю и попробую найти ошибку.
В консоле у меня получается это сделать, но мне нужно с формой когда разобраться

Можешь выложить рабочий пример, чтоб была форма с кнопкой поиск и listview куда заносятся результаты поиска?
Заранее спасибо!
0
545 / 344 / 12
Регистрация: 05.11.2010
Сообщений: 1,076
Записей в блоге: 1
31.10.2011, 23:47
Мне этим заниматься времени сейчас нет, ты бы хоть макет формы накидал, упростил работу мне.
1
Заблокирован
02.11.2011, 19:48  [ТС]
Цитата Сообщение от Герц Посмотреть сообщение
Мне этим заниматься времени сейчас нет, ты бы хоть макет формы накидал, упростил работу мне.
У меня 2010 У тебя запустится?
0
Заблокирован
02.11.2011, 20:00  [ТС]
Вот, готово!
Вложения
Тип файла: zip FormForSearch.zip (760.4 Кб, 31 просмотров)
0
545 / 344 / 12
Регистрация: 05.11.2010
Сообщений: 1,076
Записей в блоге: 1
03.11.2011, 23:44
Cейчас наваяем.
0
545 / 344 / 12
Регистрация: 05.11.2010
Сообщений: 1,076
Записей в блоге: 1
04.11.2011, 00:27
Забирай
Миниатюры
Как выполнить поиск файлов в папке и подпапках, и подподпапках, и т.д.?  
Вложения
Тип файла: rar Search.rar (8.2 Кб, 64 просмотров)
1
545 / 344 / 12
Регистрация: 05.11.2010
Сообщений: 1,076
Записей в блоге: 1
04.11.2011, 14:06
А вот вариант с деревом:
Вложения
Тип файла: rar Search.rar (8.3 Кб, 49 просмотров)
1
Заблокирован
04.11.2011, 18:35  [ТС]
Большое спасибо, теперь все понятно и наглядно
0
545 / 344 / 12
Регистрация: 05.11.2010
Сообщений: 1,076
Записей в блоге: 1
04.11.2011, 22:14
Чтобы все это заполнялось побыстрее - нужно поиск вынести в отдельный поток, тогда список/дерево будут заполняться по мере нахождения новых айтемов.
В случае с деревом вообще стоит заполнять лишь текущий уровень вложенности, если пользователь нажал на одну из папок и захотел увидеть её содержимое - заполнять её, и так далее. Так можно и корень диска без проблем вывести в дереве, а с текущим вариантом придется ждать долго, пока алгоритм не залезет во все папки на всем диске :-)
1
0 / 0 / 0
Регистрация: 04.12.2011
Сообщений: 4
27.07.2013, 01:47
Цитата Сообщение от Герц Посмотреть сообщение
А вот вариант с деревом:
Мне тоже надо, но не могу открыть вложение. Пишет просмотр только со страниц сайта и возвращает обратно.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16478 / 7441 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
29.07.2013, 22:12
Цитата Сообщение от GhostMan Посмотреть сообщение
Как выполнить поиск файлов в папке и подпапках, и подподпапках, и т.д.?
Рецепты приведены выше.
Добавлю, что поиск файлов должен также учитывать наличие на дисках
таких вещей, как reparse points. Например, папка "Goto_D" на диске "C" может
быть точкой монтирования диска "D". А папка "Goto_C" на диске "D" может
указывать обратно, на диск "C". При попытке выполнить рекурсивный обход
папок в такой файловой структуре произойдет зацикливание.
0
1 / 1 / 1
Регистрация: 25.02.2013
Сообщений: 38
12.08.2013, 00:41
А яем вас не устраивает православный
C++
1
%массив String^% = IO::Directory::GetFiles(%путь%, "*.*", IO::SearchOption::AllDirectories);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.08.2013, 00:41
Помогаю со студенческими работами здесь

Как получить список файлов в папке и подпапках
1.Как получить список файлов в выбранной папке и в её подпапках вот в таком вот виде? \Folder\Файл.txt ...

Список файлов в папке и её подпапках
Привет всем скажите пожалуйста как получить список файлов в папке и её подпапках и подпапках папок этих подпапок :D вот такая вот муть)) ...

Получить список файлов в папке и подпапках
Каким образом получить список файлов в текущей папке приложения и всех подпапках рядом, с учетом доступа? Например: string files =...

Создание списка файлов в папке и подпапках
Здравствуйте. Есть папка с подпапками, названия могут быть разные. Нужно получить список всех файлов и путь к ним. Чтобы в...

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


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

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

Новые блоги и статьи
Вопросы на собеседованиях по микросервисам
ArchitectMsa 27.03.2025
Работодатели ищут не просто разработчиков, знающих базовые концепции, а специалистов, разбирающихся в тонкостях масштабирования, отказоустойчивости и производительности. Сейчас на первый план выходят. . .
Взаимодействие Python с REST API
py-thonny 27.03.2025
REST API - это архитектурный стиль взаимодействия компонентов распределённого приложения в сети. Python располагает функциональным набором инструментов для работы с REST API и основная библиотека для. . .
sshd restrictions, ssh access limitations
jigi33 26.03.2025
sshd restrictions | ssh access limitations рестрикции доступа на сервер sshd статья: https:/ / www. golinuxcloud. com/ restrict-allow-ssh-certain-users-groups-rhel
Компиляция C++ с Clang API
NullReferenced 24.03.2025
Компиляторы обычно воспринимаются как черные ящики, которые превращают исходный код в исполняемые файлы. Мы запускаем компилятор командой в терминале, и вуаля — получаем бинарник. Но что если нужно. . .
Многопоточное программировани­е в C#: Класс Thread
UnmanagedCoder 24.03.2025
Когда запускается приложение на компьютере, операционная система создаёт для него процесс - виртуальное адресное пространство. В C# этот процесс изначально получает один поток выполнения — главный. . .
SwiftUI Data Flow: Передача данных между представлениями
mobDevWorks 23.03.2025
При первом знакомстве со SwiftUI кажется, что фреймворк предлагает избыточное количество механизмов для передачи данных: @State, @Binding, @StateObject, @ObservedObject, @EnvironmentObject и другие. . . .
Моки в Java: Сравниваем Mockito, EasyMock, JMockit
Javaican 23.03.2025
Как протестировать класс, который зависит от других сложных компонентов, таких как базы данных, веб-сервисы или другие классы, с которыми и так непросто работать в тестовом окружении? Для этого и. . .
Архитектурные паттерны микросервисов: ТОП-10 шаблонов
ArchitectMsa 22.03.2025
Популярность микросервисной архитектуры объясняется множеством важных преимуществ. К примеру, она позволяет командам разработчиков работать независимо друг от друга, используя различные технологии и. . .
Оптимизация рендеринга в Unity: Сортировка миллиона спрайтов
GameUnited 22.03.2025
Помните, когда наличие сотни спрайтов в игре приводило к существенному падению производительности? Время таких ограничений уходит в прошлое. Сегодня геймдев сталкивается с задачами совершенно иного. . .
Образование и практика
Igor3D 21.03.2025
Добрый день А вот каково качество/ эффективность ВУЗовского образования? Аналитическая геометрия изучается в первом семестре и считается довольно легким курсом, что вполне справедливо. Ну хорошо,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru