В FSO маска выбора файлов есть ? или нет ?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Edward
Обычный пользователь
Обычный пользователь
 
Сообщения: 50
Зарегистрирован: 14.08.2002 (Ср) 11:54
Откуда: Москва

В FSO маска выбора файлов есть ? или нет ?

Сообщение Edward » 27.03.2003 (Чт) 19:32

целый день мучаюсь понять не могу.
Используя оператора Dir можно использовать маску для выбора определенных файлов.
А в FSO что то не могу найти как это сделать.
в архиве сообщений что то не нашел как это сделать.
на яндексе тоже.
Подскажите кто знает.
Спасибо.
С уважением.
Эдуард.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 27.03.2003 (Чт) 20:29

нет такого, перебирай коллекция с оператором LIKE
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Firestorm
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 946
Зарегистрирован: 02.05.2002 (Чт) 14:36
Откуда: Russia

Сообщение Firestorm » 27.03.2003 (Чт) 20:45

поконкретней опиши свою проблему и суть действий...
может чем-нить поможет обычный файллистбокс со свей маской? :roll:
...просто гламурный падонак...
_________________
reborn! v.2 :twisted:
_________________

Edward
Обычный пользователь
Обычный пользователь
 
Сообщения: 50
Зарегистрирован: 14.08.2002 (Ср) 11:54
Откуда: Москва

Сообщение Edward » 28.03.2003 (Пт) 10:43

Я хочу выбирать из папки только определенные файлы, например , только txt или htm, или exe.
Просто мне нужно еще отслеживать разные атрибуты файла.
поэтому хочу использовать FSO.
То есть хочу выбирать строго определнные файлы .
Например:
sFile = Dir$("D:\Dannye\*.txt") будут отобраны только файлы txt , а как это сделать в FSO ?

А с помощью Like сравнивать на значение , это же же.е.е.е.е.
Спасибо.
С уважением.
Эдуард.
Последний раз редактировалось Edward 28.03.2003 (Пт) 10:46, всего редактировалось 1 раз.

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 28.03.2003 (Пт) 10:44

Ну так примерно:

mask = "*.txt"

Set folder = fso.getfolder(path)

for each file in folder.files

if file.name like mask then list1.additem file.name

next file

Edward
Обычный пользователь
Обычный пользователь
 
Сообщения: 50
Зарегистрирован: 14.08.2002 (Ср) 11:54
Откуда: Москва

Сообщение Edward » 28.03.2003 (Пт) 10:49

RayShade писал(а):Ну так примерно:
mask = "*.txt"
Set folder = fso.getfolder(path)
for each file in folder.files
if file.name like mask then list1.additem file.name
next file


Спасибо RayShade !!! , ты настоящий друг :-)))))
Попробую.
О результатах постараюсь сообщить.
Удачи.
С уважением .
Эдуард.

aaf
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 190
Зарегистрирован: 08.02.2002 (Пт) 13:48
Откуда: Russia

Сообщение aaf » 28.03.2003 (Пт) 11:26

Ну так примерно:
mask = "*.txt"
Set folder = fso.getfolder(path)
for each file in folder.files
if file.name like mask then list1.additem file.name
next file


Чей то я до сегодня like только в SQL встречал. Чем Instr то перестал устраивать общественность? Может быстрее работает? Или еще чего?
Вечный LAmer

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

Сообщение GSerg » 28.03.2003 (Пт) 11:35

Чей то я до сегодня like только в SQL встречал. Чем Instr то перестал устраивать общественность? Может быстрее работает? Или еще чего?


:?: :?: :?:

Чел! Like находит кучу вещей при помощи мощных шаблонов подстановки, а Instr находит только то, что написали. Работают они быстро оба, Like медленнее, но круче.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Emzari
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 129
Зарегистрирован: 06.09.2002 (Пт) 9:08
Откуда: Georgia

Сообщение Emzari » 31.03.2003 (Пн) 19:52

Можно использоват оператор Right
например так дапустим в строковой переменной strFileName хранится имя фаила

IF Right(strFileName, 3) = "txt" Then
подходит
Else
не подходит
End If

Можно организоват цикл и все.

Edward
Обычный пользователь
Обычный пользователь
 
Сообщения: 50
Зарегистрирован: 14.08.2002 (Ср) 11:54
Откуда: Москва

Сообщение Edward » 02.04.2003 (Ср) 15:35

БОЛЬШОЕ человеческое спасибо всем. :lol: :lol: :lol:
сделал по следующему :
через Dir нахожу нужные файлы
их названия заношу в массив.
а потом зная названия файлов использую FSO для работы с их атрибутами.

Удачи всем.

-=Jaga=-
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 17.10.2007 (Ср) 8:44

Сообщение -=Jaga=- » 27.11.2007 (Вт) 7:00

Вот и мне помогло:).
Самое интересное что FSO легко удаляет файлы по маске, но fso.FileExists ничего по маске не находит. Не совсем хорошо (ИМХО) :(.

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 949
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 27.11.2007 (Вт) 12:28

всё-таки вместо FSO лучше юзать АПИ.
там и маску можно задавать в виде (*) и (?)
например, *.ht* вернёт файлы как
*.htm, так и *.html
а, *.ht? вернёт только
*.htm

-=Jaga=-
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 17.10.2007 (Ср) 8:44

Сообщение -=Jaga=- » 28.11.2007 (Ср) 9:24

А пример с объявлением API и кодом не приведете?

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 949
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 28.11.2007 (Ср) 10:25

-=Jaga=- держи

Randy Birch писал(а):
Код: Выделить всё
Option Explicit
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Copyright ©1996-2006 VBnet, Randy Birch, All Rights Reserved.
' Some pages may also contain other copyrights by the author.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Distribution: You can freely use this code in your own
'               applications, but you may not reproduce
'               or publish this code on any web site,
'               online service, or distribute as source
'               on any media without express permission.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Const vbDot = 46
Private Const MAX_PATH As Long = 260
Private Const INVALID_HANDLE_VALUE = -1
Private Const vbBackslash = ""
Private Const ALL_FILES = "*.*"

Private Type FILETIME
   dwLowDateTime As Long
   dwHighDateTime As Long
End Type

Private Type WIN32_FIND_DATA
   dwFileAttributes As Long
   ftCreationTime As FILETIME
   ftLastAccessTime As FILETIME
   ftLastWriteTime As FILETIME
   nFileSizeHigh As Long
   nFileSizeLow As Long
   dwReserved0 As Long
   dwReserved1 As Long
   cFileName As String * MAX_PATH
   cAlternate As String * 14
End Type

Private Type FILE_PARAMS
   bRecurse As Boolean
   bFindOrExclude As Long  '1=find matching, 0=exclude matching
   nCount As Long
   nSearched As Long
   sFileNameExt As String
   sFileRoot As String
End Type

Private Declare Function FindClose Lib "kernel32" _
  (ByVal hFindFile As Long) As Long
   
Private Declare Function FindFirstFile Lib "kernel32" _
   Alias "FindFirstFileA" _
  (ByVal lpFileName As String, _
   lpFindFileData As WIN32_FIND_DATA) As Long
   
Private Declare Function FindNextFile Lib "kernel32" _
   Alias "FindNextFileA" _
  (ByVal hFindFile As Long, _
   lpFindFileData As WIN32_FIND_DATA) As Long

Private Declare Function GetTickCount Lib "kernel32" () As Long

Private Declare Function lstrlen Lib "kernel32" _
    Alias "lstrlenW" (ByVal lpString As Long) As Long

Private Declare Function PathMatchSpec Lib "shlwapi" _
   Alias "PathMatchSpecW" _
  (ByVal pszFileParam As Long, _
   ByVal pszSpec As Long) As Long

Private FP As FILE_PARAMS  'holds search parameters


Private Sub Form_Load()

   Text1.Text = "c:"
   Text2.Text = "*.doc; *.xls; *.ppt"
   Option1(0).Value = True
   Command1.Caption = "Begin Search"

End Sub


Private Sub Command1_Click()

   Dim tstart As Single   'timer var for this routine only
   Dim tend As Single     'timer var for this routine only
   
   Text3.Text = ""
   Text4.Text = ""
   Text5.Text = ""
   List1.Clear
   List1.Visible = False
   
   With FP
      .sFileRoot = QualifyPath(Text1.Text) 'start path
      .sFileNameExt = Text2.Text           'file type(s) of interest
      .bRecurse = Check1.Value = 1         'True = recursive search
      .nCount = 0                          'results
      .nSearched = 0                       'results
      .bFindOrExclude = IIf(Option1(0).Value = True, 1, 0) '0=include, 1=exclude
   End With
 
   tstart = GetTickCount()
   Call SearchForFiles(FP.sFileRoot)
   tend = GetTickCount()
   
   List1.Visible = True
   Text3.Text = Format$(FP.nSearched, "###,###,###,##0")
   Text4.Text = Format$(FP.nCount, "###,###,###,##0")
   Text5.Text = FormatNumber((tend - tstart) / 1000, 2) & "  seconds"
                                   
End Sub


Private Sub SearchForFiles(sRoot As String)

   Dim WFD As WIN32_FIND_DATA
   Dim hFile As Long
 
   hFile = FindFirstFile(sRoot & ALL_FILES, WFD)
 
   If hFile <> INVALID_HANDLE_VALUE Then
   
      Do
                 
        'if a folder, and recurse specified, call
        'method again
         If (WFD.dwFileAttributes And vbDirectory) Then
            If Asc(WFD.cFileName) <> vbDot Then

             If FP.bRecurse Then
                  SearchForFiles sRoot & TrimNull(WFD.cFileName) & vbBackslash
               End If
            End If
           
         Else
         
           'must be a file..
            If MatchSpec(WFD.cFileName, FP.sFileNameExt) Then
               FP.nCount = FP.nCount + 1
               List1.AddItem sRoot & TrimNull(WFD.cFileName)
            End If  'If MatchSpec
     
         End If 'If WFD.dwFileAttributes
     
         FP.nSearched = FP.nSearched + 1
     
      Loop While FindNextFile(hFile, WFD)
   
   End If 'If hFile
 
   Call FindClose(hFile)

End Sub


Private Function QualifyPath(spath As String) As String

   If Right$(spath, 1) <> vbBackslash Then
      QualifyPath = spath & vbBackslash
   Else
      QualifyPath = spath
   End If
     
End Function


Private Function TrimNull(startstr As String) As String

   TrimNull = Left$(startstr, lstrlen(StrPtr(startstr)))
   
End Function


Private Function MatchSpec(sFile As String, sSpec As String) As Boolean

   MatchSpec = PathMatchSpec(StrPtr(sFile), StrPtr(sSpec)) = FP.bFindOrExclude
   
End Function


кидай в код формы.
на форму не забудь кинуть:
ListBox(List1), 5 TextBox'oв(Text1-Text5), 2 OptionButton(Option1) и ChecBox(Check1) он определяет искать ли файлы в поддиректориях....

-=Jaga=-
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 17.10.2007 (Ср) 8:44

Сообщение -=Jaga=- » 29.11.2007 (Чт) 9:33

Огромное спасибо!

Cytron
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 266
Зарегистрирован: 15.02.2007 (Чт) 21:09

Сообщение Cytron » 29.11.2007 (Чт) 22:26

Я не совсем понял, чем автора темы не устраивают GetAttr и SetAttr?


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

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

Сейчас этот форум просматривают: AhrefsBot и гости: 20

    TopList  
cron