www.map-info.ru :: Просмотр темы - Функции FindFirstFile/FindNextFile и dwFileAttributes
                               РќР° главную страницу сайта

 
                                
ВходВход    РегистрацияРегистрация    ПрофильПрофиль    ПользователиПользователи    ГруппыГруппы    FAQFAQ    ПоискПоиск  

 
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Предыдущая тема :: Следующая тема  
Автор Сообщение
sysrepos



Зарегистрирован: 22.10.2012
Сообщения: 39

СообщениеДобавлено: Пн Сен 09, 2013 4:18 pm    Заголовок сообщения: Функции FindFirstFile/FindNextFile и dwFileAttributes Добавить ответ со ссылкой на данный текст

Добрый день.
Пытаюсь разобраться с функциями FindFirstFile, FindNextFile, в связи с чем появился вопрос.


1. В описании структуры WIN32_FIND_DATA есть член структуры dwFileAttributes, который может состоять
из некоторых значений, один из которых - FILE_ATTRIBUTE_DIRECTORY, который идентифицирует каталог.
Никак не могу понять как применить его в MapBasic.

Как я понял, чтобы узнать, например, имя файла или папки, найденного функцией FindFirstFile,
нужно использовать WFD.cFileName.
А чтобы узнать, что было найдено - файл или папка, нужно как то использовать
dwFileAttributes и FILE_ATTRIBUTE_DIRECTORY.

Пробовал
print WFD.FILE_ATTRIBUTE_DIRECTORY
print WFD.dwFileAttributes.FILE_ATTRIBUTE_DIRECTORY
print FILE_ATTRIBUTE_DIRECTORY

Пишет ошибка.

Вопрос: как нужно использовать FILE_ATTRIBUTE_DIRECTORY, чтобы узнать, что нашла функция FindFirstFile/FindNextFile, файл или папку?

Описание структуры WIN32_FIND_DATA использовал с сайта
http://vsokovikov.narod.ru/New_MSDN_API/Menage_files/str_win32_find_data.htm


Последний раз редактировалось: sysrepos (Чт Сен 12, 2013 9:37 am), всего редактировалось 2 раз(а)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
sysrepos



Зарегистрирован: 22.10.2012
Сообщения: 39

СообщениеДобавлено: Пн Сен 09, 2013 4:21 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

сам код программы, с которым я эксперементировал

Код:

'Блок описаний
Include "mapbasic.def"
Include "icons.def"
define MAX_PATH 260
define INVALID_HANDLE_VALUE -1
''''''''''''''''''''''''''''''''''''''''''''''129
Type FILETIME
dwLowDateTime as integer
dwHighDateTime as integer
End Type

Type WIN32_FIND_DATA
dwFileAttributes as integer
ftCreationTime as FILETIME
ftLastAccessTime as FILETIME
ftLastWriteTime as FILETIME
nFileSizeHigh as integer
nFileSizeLow as integer
dwReserved0 as integer
dwReserved1 as integer
cFileName as string * MAX_PATH
cAlternate as string *14
End Type

Declare function FindFirstFile lib "kernel32" alias "FindFirstFileA"
(byval
lpFileName as string,
lpFindFileData as WIN32_FIND_DATA
) as integer

Declare function FindNextFile lib "kernel32" alias "FindNextFileA"(byval
hFindFile as integer,lpFindFileData as WIN32_FIND_DATA) as integer

Declare function FindClose lib "kernel32"(byval hFindFile as integer) as integer

Declare Sub Main
Declare sub SetFOLDER

Declare Sub proc1

dim curPtch as string
dim curFiles() as string
dim curCoordFiles() as string
dim ListLayers() as string

'''''''Главная процедура
Sub Main
curPtch =""  'путь

Create ButtonPad "bmpOptima" as
PushButton
HelpMsg
"Выбор активной папки с растровыми таблицами\nАктивная папка"
Calling SetFOLDER
ID 2001
Icon MI_ICON_NUMBERS_2
Enable

Show
Fixed
end sub
'''''''Главная процедура


''''''''''''''''''''''''''''''''Процедура выбора папки с растровыми таблицами

sub SetFOLDER
dim k as integer
dim hSearch as integer
dim WFD as WIN32_FIND_DATA
dim cont as logical   'было integer
dim SearchStr as string
'dim curFile as string
'Здесь для определения папки используется диалог выбора файла45 и
'от пользователя потребуется дополнительное действие:
'выбрать в папке файл (любой)
curPtch=FileOpenDlg(curPtch,"" ,"tab","Выбор папки")
if curPtch ="" then
note "Папка не определена!"
exit sub
end if
curPtch=PathToDirectory$(curPtch)

SearchStr="*."  'только папки
'SearchStr="*.*"  'все файлы и папки
'SearchStr="\*"  'только файлы???
'SearchStr="*doma1*.*"  'все файлы doma1 с любым разрешением разрешением
'SearchStr="*.tab"  'только файлы с разрешением .tab 

cont=true
k=0
'Поиск первого файла *.tab в папке curPtch:
'Манипулятор hSearch используется для продолжения поиска.
'Переменная WFD со структурой WIN32_FIND_DATA заполняется информацией
'о найденном файле и используется при продолжении поиска.

hSearch =FindFirstFile(curPtch & SearchStr ,WFD)

print  ""

if hSearch <> INVALID_HANDLE_VALUE Then

do while cont
k=k+1
redim curFiles(k)
curFiles(k)=WFD.cFileName

'print "WFD.dwFileAttributes: "+ WFD.dwFileAttributes 'определяет папка(16) или файл(32)
print FILE_ATTRIBUTE_DIRECTORY

print "curPtch: "+ curPtch+"\"+curFiles(k)
print  ""

'Функция ищет следующий файл.
'В случае удачи возвращает TRUE (<>0) или FALSE (=0) при неудаче.
cont=FindNextFile(hSearch,WFD)

loop

'Закрыть манипулятор.
cont=FindClose(hSearch)

else
note "Файлы *.tab в папке " & curPtch & " не найдены!"
exit sub
end if
end sub

'''''''''''''''''''''''''''''''''''''''''


Sub proc1

end sub
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Андрей Могильный



Зарегистрирован: 21.03.2006
Сообщения: 864

СообщениеДобавлено: Ср Сен 11, 2013 3:49 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Я проверял по-тупому:
If WFD.dwFileAttributes = 16 Then
' Работаем с каталогом WFD.cFileName
End If
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Андрей Могильный



Зарегистрирован: 21.03.2006
Сообщения: 864

СообщениеДобавлено: Ср Сен 11, 2013 3:50 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

А так, там конечно битовая маска. Надо сначала на MapBasic написать функции работы с масками - xor, and и т.д. (или экспортировать их из какой-нибудь dll) и работать со значением как с маской.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
sysrepos



Зарегистрирован: 22.10.2012
Сообщения: 39

СообщениеДобавлено: Чт Сен 12, 2013 9:40 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

ясно, спасибо.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Top.Mail.Ru