Можно ли через FindFirstFile перебрать только папки?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Можно ли через FindFirstFile перебрать только папки?

Сообщение Pantalone » 12.08.2006 (Сб) 23:27

Не просто игнорировать файлы, а вообще их не перебирать в цикле.
Т.е. у меня в директории есть две папки и мульен файлов, как узнать эти два вхождения папок не проверяя каждый объект в директории?
Может вопрос совсем простой, просьба не пинать, весь день пахал, уже не варит ничего.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 12.08.2006 (Сб) 23:32

FindExSearchLimitToDirectories
Изображение

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 13.08.2006 (Вс) 0:10

Спасибо, попробую. Читал просто что эта штука не работает под 98 виндой и на фате 32.

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 13.08.2006 (Вс) 0:28

Осталось только выяснить как будут на бэйсике выглядеть эти конструкции:

typedef enum _FINDEX_INFO_LEVELS {
FindExInfoStandard,
FindExInfoMaxInfoLevel
} FINDEX_INFO_LEVELS;

typedef enum _FINDEX_SEARCH_OPS {
FindExSearchNameMatch,
FindExSearchLimitToDirectories,
FindExSearchLimitToDevices,
FindExSearchMaxSearchOp
} FINDEX_SEARCH_OPS;

В инете вообще голяк.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 13.08.2006 (Вс) 0:32

Pantalone писал(а):Осталось только выяснить как будут на бэйсике выглядеть эти конструкции:

typedef enum _FINDEX_INFO_LEVELS {
FindExInfoStandard,
FindExInfoMaxInfoLevel
} FINDEX_INFO_LEVELS;

typedef enum _FINDEX_SEARCH_OPS {
FindExSearchNameMatch,
FindExSearchLimitToDirectories,
FindExSearchLimitToDevices,
FindExSearchMaxSearchOp
} FINDEX_SEARCH_OPS;

В инете вообще голяк.

Ну просто ооочень нетривиально перевести:
Код: Выделить всё
Enum FINDEX_INFO_LEVELS
FindExInfoStandard
FindExInfoMaxInfoLevel
End Enum

Enum FINDEX_SEARCH_OPS
FindExSearchNameMatch
FindExSearchLimitToDirectories
FindExSearchLimitToDevices
FindExSearchMaxSearchOp
End Enum
Изображение

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 13.08.2006 (Вс) 0:45

tyomitch
Пока ты тут, подскажи если знаешь где значения этих констант взять? Которые в перечислении?
Код: Выделить всё
Enum FINDEX_INFO_LEVELS
FindExInfoStandard = ?
FindExInfoMaxInfoLevel = ?
End Enum
Должно же так быть как-то?
Я с перечислениями мало работал, не соображу как подъехать.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 13.08.2006 (Вс) 0:49

Pantalone
Если ты не понял, тебе дали готовый код.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 13.08.2006 (Вс) 0:59

Последний глупый вопрос на сегодня надеюсь, как это хозяйство объявить в бэйсике?

Код: Выделить всё
HANDLE FindFirstFileEx(  LPCTSTR lpFileName,
  FINDEX_INFO_LEVELS fInfoLevelId,
  LPVOID lpFindFileData,
  FINDEX_SEARCH_OPS fSearchOp,
  LPVOID lpSearchFilter,
  DWORD dwAdditionalFlags
);


В смысле
Код: Выделить всё
Declare ...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 13.08.2006 (Вс) 1:15

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 13.08.2006 (Вс) 1:16

GSerg
Спасибо!

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 13.08.2006 (Вс) 14:43

Правда эта функция все равно перебирает и папки и файлы и это занимает тучу времени. Если например у меня 2 папки и 50000 файлов, чтобы вывести инфу об этих папках, мне нужно сначала отыскать их среди файлов, т.е. это полный перебор и куча времени.
Вероятно так и должно быть, в мсдн написано что FindExSearchLimitToDirectories reserved for future.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 14.08.2006 (Пн) 10:12

А чем, по твоему, файлы отличаются от каталогов?
И как ты предлагаешь осуществлять поиск по атрибутам в неупорядоченном множестве, кроме как перебором?
Lasciate ogni speranza, voi ch'entrate.

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 14.08.2006 (Пн) 22:14

Pantalone писал(а):tyomitch
Пока ты тут, подскажи если знаешь где значения этих констант взять? Которые в перечислении?
Код: Выделить всё
Enum FINDEX_INFO_LEVELS
FindExInfoStandard = ?
FindExInfoMaxInfoLevel = ?
End Enum
Должно же так быть как-то?
Я с перечислениями мало работал, не соображу как подъехать.
Слушай, а правда, ты рисовать не пробовал? Или стихи писать? Вдруг получится. Там не нужно знать, что такое перечисления. Там если не в рифму, или не в размер, или орфографическая ошибка - то авторский стиль...
Я с перечислениями мало работал,
Т.е. ты хочешь сказать, что ты работал с перечислениями, хоть и мало, но не знаешь, чему равны "констант"ы, которые "в перечислении"?
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 14.08.2006 (Пн) 23:44

vvs_adm писал(а):
Я с перечислениями мало работал,
Т.е. ты хочешь сказать, что ты работал с перечислениями, хоть и мало, но не знаешь, чему равны "констант"ы, которые "в перечислении"?

У меня на винте масса примеров которыми я руководствуюсь как хелпом. Во многих примерах я видел непосредственную нумерацию в этих перечислениях, чем и обусловлен вопрос. Так что не стоит ехидничать.

Если ты не знал о произвольной нумерации, можешь изучить вопрос:
http://msdn2.microsoft.com/en-us/library/8h84wky1.aspx

Пример оттуда:
Код: Выделить всё
Enum filePermissions
    create = 1
    read = 2
    write = 4
    delete = 8
End Enum

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 15.08.2006 (Вт) 0:20

Pantalone писал(а):У меня на винте масса примеров которыми я руководствуюсь как хелпом.
Рекомендую купить любую книжку по VB и спользовать ее первым источником "хелпа". А лучше ее сначала просто всю прочитать. Про перечисления там должно быть. Если нет возможности купить книжку и нет интернета, где можно открыть яндекс и ввести Visual Basic enum, то можно выполнить следующий код
Код: Выделить всё
Option Explicit

Private Enum MyEnum
    e1
    e2
    e3
    e4
    e5
End Enum

Private Sub Form_Load()
    Debug.Print e1
    Debug.Print e2
    Debug.Print e3
    Debug.Print e4
End Sub
и самому угадать значение константы e5
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 32

    TopList  
cron