Здравствуйте, Аноним, Вы писали:
А>Поиск файлов идет в каталоге c:\windows\system32 А>возвращаются только 3 объекта А>drivers, А>folder.htt А>и desktop.ini
Один раз тоже столкнулся с такой ерундой. нужно было получить список директорий... в хелпе было указано что для директории свойство SearchRec.Attr (var SearchRec: TSearchRec равно faDirectory (это константа, равная не помню чему (32 чтоли)). только оказалось что еще может быть равно и 48 .
вот код :
procedure ScanDir(StartDir: string; List: TStrings);
var
SearchRec: TSearchRec;
begin
if StartDir[Length(StartDir)] <> '\' then
StartDir := StartDir + '\';
if FindFirst(StartDir+'*.*', faDirectory, SearchRec) = 0 then
begin
repeat
Application.ProcessMessages;
if ((SearchRec.Attr = faDirectory) or (SearchRec.Attr = 48)) then
if (SearchRec.Name <> '..') and (SearchRec.Name <> '.') then
List.Add(SearchRec.Name);
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
end;
Re[2]: FindFirstFile FindNextFile возвращают не все файлы
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, To4kuH, Вы писали:
TH>>определил, кстати, простым способом. вывел значеня этого поля для всех файлов и папок директории
А>А, если применительно к C++?
...... А>}
мммм. к сожелению к с++ тока недавно приступил... ничего не могу подсказать.. пока не могу..
Re[2]: FindFirstFile FindNextFile возвращают не все файлы
Здравствуйте, To4kuH, Вы писали:
А>>Поиск файлов идет в каталоге c:\windows\system32 А>>возвращаются только 3 объекта А>>drivers, А>>folder.htt А>>и desktop.ini
TH>Один раз тоже столкнулся с такой ерундой. нужно было получить список директорий... в хелпе было указано что для директории свойство SearchRec.Attr (var SearchRec: TSearchRec равно faDirectory (это константа, равная не помню чему (32 чтоли)). только оказалось что еще может быть равно и 48 .
TH> if ((SearchRec.Attr = faDirectory) or (SearchRec.Attr = 48)) then
Правильно:
if ( SearchRec.Attr & FILE_ATTRIBUTE_DIRECTORY )
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[3]: FindFirstFile FindNextFile возвращают не все файлы
Здравствуйте, gear nuke, Вы писали:
GN>Здравствуйте, To4kuH, Вы писали:
А>>>Поиск файлов идет в каталоге c:\windows\system32 А>>>возвращаются только 3 объекта А>>>drivers, А>>>folder.htt А>>>и desktop.ini
TH>>Один раз тоже столкнулся с такой ерундой. нужно было получить список директорий... в хелпе было указано что для директории свойство SearchRec.Attr (var SearchRec: TSearchRec равно faDirectory (это константа, равная не помню чему (32 чтоли)). только оказалось что еще может быть равно и 48 .
GN>Нет, не может. Это битовый флаг: GN>
хм, но тем не менее... когда делал на работе, проверял на равенство только faDirectory. все пахало. и был очень удивлен, когда запустил эту прогу на домашней машине. увидел тока несколько директорий.
Constant Value Description Linux Meaning
faDirectory 16 Directory files Directory.
вывел все файлы вместе с атрибутами. и вот у некоторых директорий этот битовый флаг был равен 16, у других 48. в чем причина -- не разбирался
Re[4]: FindFirstFile FindNextFile возвращают не все файлы
TH>хм, но тем не менее... когда делал на работе, проверял на равенство только faDirectory. все пахало.
ну да, и C:\WINDOWS\Fonts отображалась, на которой стоит атрибут System?
TH>и был очень удивлен, когда запустил эту прогу на домашней машине. увидел тока несколько директорий. TH>
TH>Constant Value Description Linux Meaning
TH>faDirectory 16 Directory files Directory.
TH>
TH>вывел все файлы вместе с атрибутами. и вот у некоторых директорий этот битовый флаг был равен 16, у других 48. в чем причина -- не разбирался
ясен пень в чем — кроме FILE_ATTRIBUTE_DIRECTORY установлен еще и флаг FILE_ATTRIBUTE_ARCHIVE Можно еще и FILE_ATTRIBUTE_SYSTEM и FILE_ATTRIBUTE_HIDDEN впендюрить в разных комбинациях, еще 10 разных чисел будет, так и будешь со всеми сравнивать?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: FindFirstFile FindNextFile возвращают не все файлы
Здравствуйте, To4kuH, Вы писали:
TH>>>Один раз тоже столкнулся с такой ерундой. нужно было получить список директорий... в хелпе было указано что для директории свойство SearchRec.Attr (var SearchRec: TSearchRec равно faDirectory (это константа, равная не помню чему (32 чтоли)). только оказалось что еще может быть равно и 48 .
GN>>Нет, не может. Это битовый флаг: GN>>
TH>хм, но тем не менее... когда делал на работе, проверял на равенство только faDirectory.
Это флаг, поэтому нужно проверять только один бит, а не весь DWORD. Иначе может работать, а может и не работать .
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[4]: FindFirstFile FindNextFile возвращают не все файлы
Здравствуйте, <Аноним>, Вы писали:
А>А, если применительно к C++? А>Вот мой код:
[nuked]
Используйте теги форматирования кода ([pascаl][/pascal]), иначе читать невозможно.
Старайтесь приводить только код относящийся к проблеме. Вполне вероятно, что исключая лишнее, Вы сами найдёте ошибку.
Заглядывайте в MSDN, там можно найти примеры
Вот модифицированный пример из MSDN (Оригинал):
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[5]: FindFirstFile FindNextFile возвращают не все файлы
.....
GN>Это флаг, поэтому нужно проверять только один бит, а не весь DWORD. Иначе может работать, а может и не работать .
угу. понял. посмотрел эти атрибуты в двоичном виде.. нужно внимательней rtfm
Re[5]: FindFirstFile FindNextFile возвращают не все файлы
От:
Аноним
Дата:
01.09.05 15:58
Оценка:
Может я чего-то не понимаю, но вопрос стоял в том, что функция FindNextFile возвращает не все файлы
Т.е попросту говорит, что файлов нет (делаю getlasterror) и именно в C:\windows\system32, хотя там есс-но файлов до черта...
Re[6]: FindFirstFile FindNextFile возвращают не все файлы
Здравствуйте, Аноним, Вы писали:
А>Может я чего-то не понимаю, но вопрос стоял в том, что функция FindNextFile возвращает не все файлы А>Т.е попросту говорит, что файлов нет (делаю getlasterror) и именно в C:\windows\system32, хотя там есс-но файлов до черта...
Люди попробовали потелепатировать на этот счет и причем пришли к правильным умозаключениям Тебе вернуло только hidden файлы!
В твоем случае вызывается главный виновник: код в студию!
Re[6]: FindFirstFile FindNextFile возвращают не все файлы
Здравствуйте, <Аноним>, Вы писали:
А>Может я чего-то не понимаю, но вопрос стоял в том, что функция FindNextFile возвращает не все файлы А>Т.е попросту говорит, что файлов нет (делаю getlasterror) и именно в C:\windows\system32, хотя там есс-но файлов до черта...
Мой пример тоже не выводит ничего? У меня он выводит список подпапок (сбили в другом посте размышлениями о FILE_ATTRIBUTE_DIRECTORY). Если нужны и файлы, нужно просто убрать проверку с этим флагом.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[7]: FindFirstFile FindNextFile возвращают не все файлы
От:
Аноним
Дата:
01.09.05 16:34
Оценка:
Здравствуйте, Danchik, Вы писали:
D>Люди попробовали потелепатировать на этот счет и причем пришли к правильным умозаключениям Тебе вернуло только hidden файлы! D>В твоем случае вызывается главный виновник: код в студию!
Странно, но при просмотре других каталогов все нормально.
Вот мой код:
HANDLE hFindFile; //handle used in a subsequent call
// to FindNextFile or FindClose.
WIN32_FIND_DATA lpFindFileData;
char maskofext[] = "*.*";
char strFullPath[MAX_PATH]; //строка, которая хранит полный путь + маска
strcpy(strFullPath, strCurrentRightDir);
if (strFullPath[lstrlen(strFullPath)-1] != '\\')
strcat(strFullPath, "\\");
strcat(strFullPath, maskofext);
//////////////////////////////////////////////////////////////////////////
hFindFile = FindFirstFile(
strFullPath,
&lpFindFileData);
if (INVALID_HANDLE_VALUE != hFindFile ) {
do {
//пропускаем точкуif(strcmp(lpFindFileData.cFileName, "."))
{
...
}
} while(FindNextFile(hFindFile, &lpFindFileData) != NULL);
FindClose(hFindFile); }
Re[7]: FindFirstFile FindNextFile возвращают не все файлы
От:
Аноним
Дата:
01.09.05 17:05
Оценка:
Здравствуйте, gear nuke, Вы писали:
GN>Мой пример тоже не выводит ничего? У меня он выводит список подпапок (сбили в другом посте размышлениями о FILE_ATTRIBUTE_DIRECTORY). Если нужны и файлы, нужно просто убрать проверку с этим флагом.
Спасибо за ответ.
Ваш пример все выводит. Буду разбираться в своем коде...
Re[8]: FindFirstFile FindNextFile возвращают не все файлы
Здравствуйте, <Аноним>, Вы писали:
А>Здравствуйте, gear nuke, Вы писали:
GN>>Мой пример тоже не выводит ничего? У меня он выводит список подпапок (сбили в другом посте размышлениями о FILE_ATTRIBUTE_DIRECTORY). Если нужны и файлы, нужно просто убрать проверку с этим флагом.
А>Спасибо за ответ.
А>Ваш пример все выводит. Буду разбираться в своем коде...
Мне почему-то кажется, что если в Ваш код поставить printf, то он тоже будет всё выводить, а проблема в другом месте.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[9]: FindFirstFile FindNextFile возвращают не все файлы
От:
Аноним
Дата:
01.09.05 19:33
Оценка:
Здравствуйте, gear nuke, Вы писали:
GN>Мне почему-то кажется, что если в Ваш код поставить printf, то он тоже будет всё выводить, а проблема в другом месте.
Да, действительно, перетащил цикл из mfc'ного проекта в win32 console application и заработало!!!
if (INVALID_HANDLE_VALUE != hFindFile ) {
do
{ ... }
while(FindNextFile(hFindFile, &lpFindFileData));
И там и там просто смотрел, что возвращают функции не выводя на экран результат. В mfc проекте не хочет искать ВСЕ файлы и папки и все тут.