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

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



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

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

Опять же, там внизу есть форум с разработчиком, чёж ты у него не спросил, народ там баги находит.
...
Рейтинг: 0 / 0
15.04.2004, 11:01
    #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
15.04.2004, 12:43
    #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
16.04.2004, 08:19
    #32483659
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
поиск файлов
Ясно...

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

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


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