Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
16 / 6 / 3
Регистрация: 13.03.2012
Сообщений: 196

Алгоритм поиска файлов на компьютере по формату и имени

10.06.2013, 17:20. Показов 1580. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вообщем есть алгоритм который ищет файлы на пк, по формату и имени :
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
 void ListFiles(AnsiString path, TStrings* List)
{
TSearchRec sr;
if (FindFirst(path+"*.*",  faAnyFile, sr) == 0)
{
 
  if(h == 1)
  {
   Form1->Edit4->Text=path ;
      Form1->Timer1->Enabled = true;
   do
 
     {
         if (sr.Attr &  faDirectory)
          {
              if (sr.Name!=".")
              if  (sr.Name!="..")
              {
                  ListFiles(path+sr.Name+"\\",List);
 
              }
          }
          else
 
          {
           AnsiString  ext=ExtractFileExt(sr.Name);
 
          if  (ext==".")
         Form1->FileListBox1->Items->Add(path+sr.Name);
 
          }
     }
     while  (FindNext(sr) ==  0);
     }
     FindClose(sr);
}
 
    Application->ProcessMessages();
}
все работает если задавать именно имя и формат, либо если задать в строке
C++
1
  if  (ext==".")
к примеру
C++
1
  if  (ext=="1.txt")
оно найдет все файлы в указаной директории с именем "1.txt"
если сделать
C++
1
  if  (ext==".txt")
то найдет все файлы с расширением ".txt" , но если делать
C++
1
  if  (ext=="1.")
все файлы с именем "1" он не находит как это исправить ?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.06.2013, 17:20
Ответы с готовыми решениями:

Реализация поиска нужного имени в файле и вывод данных, относящихся к этому имени
Доброго времени суток всем! Прошу помощи у более компитентных людей нежели я. Полное задание...

Нужен алгоритм поиска пути в этом лабиринте (будь то волновой алгоритм или алгоритм правой/левой руки )
#include "stdafx.h" #include <iostream> #include <conio.h> using namespace std; void lab...

Волновой алгоритм поиска (Алгоритм A* / Алгоритм А стар)
Хочу разработать алгоритм для решения головоломки с подвижными дисками (перестановочная...

19
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
10.06.2013, 17:25
heroii2009, он и не должен т.к
ExtractFileExt
поиск происходит по расширению файла
0
6 / 6 / 1
Регистрация: 13.12.2012
Сообщений: 104
10.06.2013, 18:14
Цитата Сообщение от Ddv122 Посмотреть сообщение
heroii2009, он и не должен т.к
ExtractFileExt
поиск происходит по расширению файла
не подскажешь как изменить на поиск по имени ?
я изменил на ExtractFileName, но все равно эффекта 0
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
10.06.2013, 18:19
ziwn2010, На скорую руку)
C++
1
2
3
4
5
6
7
8
    AnsiString disk = Edit1->Text;         
    TSearchRec sear;                      
        if ( ! FindFirst( disk + ExtractFileName(Edit2->Text) + "*.*",faAnyFile, sear ) ) {    
            do {
                Log->Lines->Add("Найден: " + disk + sear.Name);
            } while ( ! FindNext( sear ) );
        }
        FindClose( sear );
Миниатюры
Алгоритм поиска файлов на компьютере по формату и имени  
0
6 / 6 / 1
Регистрация: 13.12.2012
Сообщений: 104
10.06.2013, 18:38
Цитата Сообщение от Ddv122 Посмотреть сообщение
ziwn2010, На скорую руку)
C++
1
2
3
4
5
6
7
8
    AnsiString disk = Edit1->Text;         
    TSearchRec sear;                      
        if ( ! FindFirst( disk + ExtractFileName(Edit2->Text) + "*.*",faAnyFile, sear ) ) {    
            do {
                Log->Lines->Add("Найден: " + disk + sear.Name);
            } while ( ! FindNext( sear ) );
        }
        FindClose( sear );
а как ты функцию вызываешь? код кнопки какой подскажи
За пример спс огромный )

Добавлено через 7 минут
Цитата Сообщение от ziwn2010 Посмотреть сообщение
а как ты функцию вызываешь? код кнопки какой подскажи
За пример спс огромный )
не мог бы ты заархивировать проэкт и кинуть мне ? дальше я сам попробую, ибо куча вопросов в которых хочу разобраться )
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
10.06.2013, 18:40
ziwn2010, это и есть код кнопки.Но ищет в одной папке, т.к рекурсию не делал. Просто пища для размышления.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//---------------------------------------------------------------------------
void __fastcall TForm1::PoiskClick(TObject *Sender)
{
    AnsiString disk = Edit1->Text;          
    Log->Clear();
    TSearchRec sear;                    
        if ( ! FindFirst( disk + ExtractFileName(Edit2->Text) + "*.*",faAnyFile, sear ) ) {    
            do {
                Log->Lines->Add("Поиск: " + disk + sear.Name);
            } while ( ! FindNext( sear ) );
        }
        FindClose( sear );     
    }
//---------------------------------------------------------------------------
0
6 / 6 / 1
Регистрация: 13.12.2012
Сообщений: 104
10.06.2013, 18:50
Цитата Сообщение от Ddv122 Посмотреть сообщение
ziwn2010, На скорую руку)
C++
1
2
3
4
5
6
7
8
    AnsiString disk = Edit1->Text;         
    TSearchRec sear;                      
        if ( ! FindFirst( disk + ExtractFileName(Edit2->Text) + "*.*",faAnyFile, sear ) ) {    
            do {
                Log->Lines->Add("Найден: " + disk + sear.Name);
            } while ( ! FindNext( sear ) );
        }
        FindClose( sear );
все сделал, спасибо огромное

Добавлено через 5 минут
Цитата Сообщение от Ddv122 Посмотреть сообщение
ziwn2010, это и есть код кнопки.Но ищет в одной папке, т.к рекурсию не делал. Просто пища для размышления.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//---------------------------------------------------------------------------
void __fastcall TForm1::PoiskClick(TObject *Sender)
{
    AnsiString disk = Edit1->Text;          
    Log->Clear();
    TSearchRec sear;                    
        if ( ! FindFirst( disk + ExtractFileName(Edit2->Text) + "*.*",faAnyFile, sear ) ) {    
            do {
                Log->Lines->Add("Поиск: " + disk + sear.Name);
            } while ( ! FindNext( sear ) );
        }
        FindClose( sear );     
    }
//---------------------------------------------------------------------------
я вот только до этого и дошел) Что в одной папке только ищет, буду думать как подправить, это сложно ?

Добавлено через 2 минуты
А вот не подскажешь, я вот получаю в Log, путь полность с именем файла, а как мне разбить на 2 отдельных компонента? на имя с расширением и на полный путь ?
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
10.06.2013, 19:03
я вот только до этого и дошел) Что в одной папке только ищет, буду думать как подправить, это сложно ?
Нет, не сложно

А вот не подскажешь, я вот получаю в Log, путь полность с именем файла, а как мне разбить на 2 отдельных компонента? на имя с расширением и на полный путь ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString disk = Edit1->Text;
    Log->Clear();
    Log2->Clear();
    TSearchRec sear;
        if ( ! FindFirst( disk + ExtractFileName(Edit2->Text) + "*.*",faAnyFile, sear ) ) {
            do {
                Log->Lines->Add("Íàéäåí: " + disk + sear.Name);
                Log2->Lines->Add("Íàéäåí: " + (sear.Name));
            } while ( ! FindNext( sear ) );
        }
        FindClose( sear );
    }
//---------------------------------------------------------------------------
Миниатюры
Алгоритм поиска файлов на компьютере по формату и имени  
0
6 / 6 / 1
Регистрация: 13.12.2012
Сообщений: 104
10.06.2013, 19:05
Цитата Сообщение от Ddv122 Посмотреть сообщение
Нет, не сложно



C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString disk = Edit1->Text;
    Log->Clear();
    Log2->Clear();
    TSearchRec sear;
        if ( ! FindFirst( disk + ExtractFileName(Edit2->Text) + "*.*",faAnyFile, sear ) ) {
            do {
                Log->Lines->Add("Íàéäåí: " + disk + sear.Name);
                Log2->Lines->Add("Íàéäåí: " + (sear.Name));
            } while ( ! FindNext( sear ) );
        }
        FindClose( sear );
    }
//---------------------------------------------------------------------------

а я тут пока играюсь, пытаюсь уловить рекурсию папок сделать
0
16 / 6 / 3
Регистрация: 13.03.2012
Сообщений: 196
10.06.2013, 19:39  [ТС]
Цитата Сообщение от Ddv122 Посмотреть сообщение
Нет, не сложно



C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString disk = Edit1->Text;
    Log->Clear();
    Log2->Clear();
    TSearchRec sear;
        if ( ! FindFirst( disk + ExtractFileName(Edit2->Text) + "*.*",faAnyFile, sear ) ) {
            do {
                Log->Lines->Add("Íàéäåí: " + disk + sear.Name);
                Log2->Lines->Add("Íàéäåí: " + (sear.Name));
            } while ( ! FindNext( sear ) );
        }
        FindClose( sear );
    }
//---------------------------------------------------------------------------

почему так ? строка за строкой идут, но в переменной sr.Name , совсем разные имена, почему так???
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
10.06.2013, 19:41
heroii2009, а откуда же нам знать что вы там на шаманили?
0
6 / 6 / 1
Регистрация: 13.12.2012
Сообщений: 104
10.06.2013, 20:29
Цитата Сообщение от Ddv122 Посмотреть сообщение
heroii2009, а откуда же нам знать что вы там на шаманили?
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
void ListFiles(AnsiString path, TStrings* List)
{
TSearchRec sr;
if (FindFirst(path+"*.*",  faAnyFile, sr) == 0)
{
 
  if(h == 1)
  {
   Form1->Edit4->Text=path ;
      Form1->Timer1->Enabled = true;
   do
 
     {
         if (sr.Attr &  faDirectory)
          {
              if (sr.Name!=".")
              if  (sr.Name!="..")
              {
                  ListFiles(path+sr.Name+"\\",List);
 
              }
          }
          else
 
          {
           AnsiString  ext=ExtractFileExt(sr.Name);
 
          if  (ext==".")
         Form1->FileListBox1->Items->Add(path+sr.Name);
 
          }
     }
     while  (FindNext(sr) ==  0);
     }
     FindClose(sr);
}
 
    Application->ProcessMessages();
}

C++
1
2
3
4
          if  (ext==".")
         Form1->FileListBox1->Items->Add(path+sr.Name);
 
          }
C++
1
2
Form1->FileListBox1->Items->Add(sr.Name);
Form1->FileListBox2->Items->Add(sr.Name);
вот так, я не пойму, почему блин....
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
10.06.2013, 20:45
ziwn2010, Вам такое нужно?То я что то уже совсем запутался
Миниатюры
Алгоритм поиска файлов на компьютере по формату и имени  
0
16 / 6 / 3
Регистрация: 13.03.2012
Сообщений: 196
10.06.2013, 20:47  [ТС]
Цитата Сообщение от Ddv122 Посмотреть сообщение
ziwn2010, Вам такое нужно?То я что то уже совсем запутался
да, только в моем примере
Вы доделали цикл перебора папок ? )) Кодиком поделетесь ?)
0
6 / 6 / 1
Регистрация: 13.12.2012
Сообщений: 104
10.06.2013, 21:41
Цитата Сообщение от Ddv122 Посмотреть сообщение
ziwn2010, Вам такое нужно?То я что то уже совсем запутался
Поделитесь пожалуйста кодиком, на поиск с рекурсией )
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
10.06.2013, 22:38
Потом попробую доделать проект вот что вышло
Можно искать файлы без расширения (1), с расширением(1.txt) и по расширению (.txt) с рекурсией
Вложения
Тип файла: rar poisk.rar (246.9 Кб, 10 просмотров)
0
6 / 6 / 1
Регистрация: 13.12.2012
Сообщений: 104
10.06.2013, 22:47
Цитата Сообщение от Ddv122 Посмотреть сообщение
Потом попробую доделать проект вот что вышло
Можно искать файлы без расширения (1), с расширением(1.txt) и по расширению (.txt) с рекурсией
спасибо огромное
0
16 / 6 / 3
Регистрация: 13.03.2012
Сообщений: 196
11.06.2013, 02:24  [ТС]
Цитата Сообщение от Ddv122 Посмотреть сообщение
Потом попробую доделать проект вот что вышло
Можно искать файлы без расширения (1), с расширением(1.txt) и по расширению (.txt) с рекурсией
блин, а сам cpp файлик можно ?? ато экзешник я там кучу должен усовершенствовать ))

Добавлено через 25 минут
Цитата Сообщение от Ddv122 Посмотреть сообщение
Потом попробую доделать проект вот что вышло
Можно искать файлы без расширения (1), с расширением(1.txt) и по расширению (.txt) с рекурсией
мне только кусочек поиска с рекурсией, остально я доделал, просмотр файлов в папке, открытие и удаление файлов и т.д. мне остался кусок рекрусивного поиска )
0
6 / 6 / 1
Регистрация: 13.12.2012
Сообщений: 104
11.06.2013, 06:48
Цитата Сообщение от Ddv122 Посмотреть сообщение
Потом попробую доделать проект вот что вышло
Можно искать файлы без расширения (1), с расширением(1.txt) и по расширению (.txt) с рекурсией
блин, всю ночь не спал, пытался этот кусочек доделать, не смог, помогите этим рекрусивным перебором папок, пожалуйста ))
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
11.06.2013, 19:11
ziwn2010,

Не по теме:

извиняюсь раньше не мог ответить, был с телефона(кнопка off не срабатывала)


К примеру возможно так
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
void ListFiles(AnsiString disk)
{
    TSearchRec sr;
    if (FindFirst(disk + "*.*",  faAnyFile, sr) == 0)
    {
        do
        {
            if (sr.Attr &  faDirectory)
            {
                if (sr.Name!=".")
                    if  (sr.Name!="..")
                    {
                        ListFiles(disk+sr.Name+"\\");
                    }
            }
            else
            {
                if (ExtractFileExt(Form1->Edit2->Text)=="" ) {
                    AnsiString Ext=ChangeFileExt( ExtractFileName(sr.Name).UpperCase(), "" );
                    if (Ext==Form1->Edit2->Text.UpperCase())    {
                        Form1->Log->Lines->Add(disk+sr.Name);
                        Form1->Log2->Lines->Add(sr.Name);
                        Application->ProcessMessages();
                    }
                }
                if (AnsiString(sr.Name).UpperCase()==Form1->Edit2->Text.UpperCase()) {
                    Form1->Log->Lines->Add(disk+sr.Name);
                    Form1->Log2->Lines->Add(sr.Name);
                    Application->ProcessMessages();
                }
                else if (ExtractFileExt(sr.Name).UpperCase() == "." + (Form1->Edit2->Text).UpperCase()) {
                    Form1->Log->Lines->Add(disk+sr.Name);
                    Form1->Log2->Lines->Add(sr.Name);
                    Application->ProcessMessages();
                }
            }
        }
        while  (FindNext(sr) ==  0);
        Application->ProcessMessages();
    }
    FindClose(sr);
    Application->ProcessMessages();
    Form1->Button1->Enabled=True;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Log->Clear();
    Log2->Clear();
    Button1->Enabled=False;
    ListFiles(Edit1->Text);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    AnsiString patch;
    if (SelectDirectory("Путь к папке ", "",patch))
    {
        Edit1->Text=patch;
    }
}
//---------------------------------------------------------------------------
C++
1
2
Edit1->Text //путь поиска
Edit2->Text //условие поиска (в моем примере 3 (искать файлы по имени без известного расширения ("1"), с расширением ("1.txt") и по расширению ("txt")
Но код советовал бы перенести в отдельный поток что бы убрать подвисание
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.06.2013, 19:11
Помогаю со студенческими работами здесь

Дополнить программу, что бы заработал алгоритм поиска в линейных структурах с барьером и алгоритм бинарного поиска
Всем привет, помогите пожалуйста закончить код, что бы в результате выводился элемент(ключ),...

В текстовом файле c именем FN1 дана домашняя работа третьеклассника в формате: <операнд><знак><операнд>=<ответ> В качест
В текстовом файле c именем FN1 дана домашняя работа третьеклассника в формате:...

Вывод на экран имени переменной(имени файла, и тд.)
Здрасти. Недалече столкнулся с проблемой: надо сравнить два файла по признаку количества...

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

Напишите программу, которая бы читала дерево в формате (а) и затем печатала бы это дерево в формате (б).
Представление дерева: а) Д (Б (А, Ф (В,)), Е (,З (Ж, И))) б) Д Б ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru