powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / поиск файлов
13 сообщений из 13, страница 1 из 1
поиск файлов
    #32479617
oksale
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пользуюсь классом CFileFind.
1. Неоюходимо осуществлять поиск в обычныйх папках и в архивах. Встроено ли это в класс? Дело в том, что когда я задаю в качестве папки для поиска архив, программа рассматривает его как пустую папку, т.е. не видит в ней файлов. В чем загвоздка?
2. Существует ли стандартный метод для поика файлов с несколькими расширениями, то есть с заданием сразу нескольких масок?
...
Рейтинг: 0 / 0
поиск файлов
    #32480367
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Всяко нет. Вот я напишу свой архиватор, никакой поиск, ясно дело, в него не влезет, потому что _не_знает_формат_. Тут та же фигня. Поиск сначала надо научить формату архивов.

2. Ну это он стандартный и есть.
...
Рейтинг: 0 / 0
поиск файлов
    #32481274
oksale
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как все, оказывается, сложно..
У меня возник еще один вопрос:
задаю маску для поиска, например, *.txt, а поиск осуществляется по маске *.txt*(будет, например, найден файл 1.txta). Почему такое происходит и как можно это обойти? Интересно, что если задать маску *.tx - ничего найдено не будет.
...
Рейтинг: 0 / 0
поиск файлов
    #32481302
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в свое время дос надо было изучать



i_i
(';')
(V),(V),,
JS
...
Рейтинг: 0 / 0
поиск файлов
    #32481377
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторзадаю маску для поиска, например, *.txt, а поиск осуществляется по маске *.txt*

Быть того не может!
Давай код сюда :)
...
Рейтинг: 0 / 0
поиск файлов
    #32481699
oksale
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здесь лежит исходный код. Где-то еще был код без использования MFC, адрес не помню, но там результат тот же..
...
Рейтинг: 0 / 0
поиск файлов
    #32482058
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, выложи сюда код. Не весь, а только про маску.
Там для доунлоада логинится надо. Я не хочу лишний раз светиться и так спамеров хватает...

Опять же, там внизу есть форум с разработчиком, чёж ты у него не спросил, народ там баги находит.
...
Рейтинг: 0 / 0
поиск файлов
    #32482305
oksale
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
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.
..........
CString sFileMask = _T( "*.txt" );
// options for search	
CFileFinder::CFindOpts	opts;

// Set CFindOpts object
opts.sBaseFolder =  "C:\" ;
opts.sFileMask = sFileMask;
DWORD dwOptionsFlags =  0 ;
dwOptionsFlags  |= FIND_ATTRIBUTES;
..........

/////////////////////////////////

int CFileFinder::Find(CFileFinder::CFindOpts &opts)
{
CFileFind	 finder;
CString  sFullMask, FileName;
CFindOpts  subOpts;
BOOL  bFound, bValidFile;

_bStopSearch = false;

// add backslashes if nesessary
INT nLastChar = opts.sBaseFolder.GetLength()- 1 ;

if (nLastChar >=  0 )
{
 if ((opts.sBaseFolder[nLastChar] != '\\') && (opts.sBaseFolder[nLastChar] != '/'))
			opts.sBaseFolder += '\\';
}

// Find directories
sFullMask = opts.sBaseFolder + CString( "*.*" );
bFound = finder.FindFile(sFullMask);
while ((bFound) && (!_bStopSearch))
{
	bFound = finder.FindNextFile();
	if ((finder.IsDirectory()) && (!finder.IsDots()))
	{
		subOpts = opts;
		subOpts.sBaseFolder = opts.sBaseFolder + finder.GetFileName();

		// Recursive call
		Find(subOpts);
	}
}

finder.Close();

_sSearchingFolder = opts.sBaseFolder;

sFullMask = opts.sBaseFolder + opts.sFileMask;
	
bFound = finder.FindFile(sFullMask,  0 );

while ((bFound) && (!_bStopSearch))
{
	bFound = finder.FindNextFile();
	if (!finder.IsDots())
	{
		// check constrains
		bValidFile = TRUE;
		if (opts.dwOptionsFlags & FIND_ATTRIBUTES)
		{
		   bValidFile = finder.MatchesMask(opts.dwFileAttributes);
		}

		// Add file to list
		if (bValidFile)
		{
			CString sName = finder.GetFilePath();
			if (finder.IsDirectory()) sName +=  "\\" ;
			_sFileName = sName;
			_aFilesFound.Add(sName);
		}
	}
}
return GetFileCount();
}
...
Рейтинг: 0 / 0
поиск файлов
    #32482546
oksale
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторв свое время дос надо было изучать
Привожу кусок статьи, ее можно почитать здесь

It was a big surprise to me when I found that the FindFileFirst Win32 API function finds a match to wildcard by using deprecated DOS rules.
In Windows 95, the situation got better ... or maybe, it was worse... Long filenames were added, but "short" filenames were saved for "compatability" with old programs. For each program with a "long" filename, Windows had auto-generated a "short" filename. When a program searches the file by wildcard, Windows decides that a match happens if it matches a long OR short name. For example, if you search "*.aaa" you will find "a.aaa" but also "verylongname.aaaa" because its short name is "verylo~1.aaa" and it matches "*.aaa".

Why am I telling that touching story? Because I've used Windows 2000 for a very long time, I've used Explorer's Find Files dialog, or FAR's manager Find File plugin, and never issued the behavior described above. But recently I had found an excellent utility dirclean by Michael Dunn, which led me to a surprise: that deprecated wildcard matches are built into Windows 2000 (or XP) also! I found this by accident: This useful utility integrates into the shell and deletes intermediate files of Visual C++ builds, by searching with a wildcard. And while deleting, among all others, all "*.res" files which are scratch and rebuildable, it also deletes "*.resx" files, which are NOT!!!
...
Рейтинг: 0 / 0
поиск файлов
    #32483659
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ясно...

Нууу.... Что можно посоветовать? :)
надо попробовать искать файлы не по "*.txt" а по "*txt" и потом проверять, что txt - это расширение.
...
Рейтинг: 0 / 0
поиск файлов
    #32483820
oksale
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
или проверять длину расширения и маску - если длина больше необходимой и маска не включает * - файл не подходит..
...
Рейтинг: 0 / 0
поиск файлов
    #32483879
DJStealth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CEMbТам для доунлоада логинится надо. Я не хочу лишний раз светиться и так спамеров хватает...
Ты не прав
------
Пр(CTime::GetCurrentTime()) ? (о) : (и)шло время спать
...
Рейтинг: 0 / 0
поиск файлов
    #32485732
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТы не прав
Чтё это я не прав?

Лишний логин он и в Африке лишний.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / поиск файлов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]