Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Показывает в папке все txt-файлы


Автор: Voldemar2004 1.6.2005, 15:10
Кусок кода показывает в папке все txt-файлы и их количество.
Компилятор видит ошибку, а я нет.

Код

Public G As Long
Public fn As String

Option Explicit

Private Sub Command2_Click()
Dim c As String
Dim i As Long

fn = Dir("e:\folder\*.txt")

Do
fn = fn + vbCrLf + Dir ' и здесь ошибка
Text1.Text = fn
Loop While fn = fn

        For i = 1 To Len(Text1.Text)
        c = Mid(Text1.Text, i, 1)
        If c = vbCr Then G = G + 1
        Next i
       
MsgBox "Количество файлов = " & G

End Sub

Автор: boevik 1.6.2005, 15:16
Voldemar2004, у тебя плохо условие написано, никогда не остановится loop

Вызов Dir после возврата пустого значения (т.е. когда нет больше файлов) , выдает ошибку.

Автор: USSR_hacker 1.6.2005, 16:15
Код

fn = fn + vbCrLf + Dir ' и здесь ошибка

Чтоб менше глюков ныло, исползуй это вместо + &:
Код

fn = fn & vbCrLf & Dir ' и здесь нет ошибки


Автор: efedron 1.6.2005, 16:29
Voldemar2004
все правильно, и должна быть ошибка, а как ты еще хотел, чтоб функция dir тебе сказала, что файлов таких в папке больше нет? smile

Автор: Guest 3.6.2005, 10:49
Юзай захайденный FileListBox. Это сведет к нулю ошибки при работе со списком файлов.

Автор: Voldemar2004 4.6.2005, 10:42
Цитата

Юзай захайденный FileListBox

вообще-то я хотел написать универсальную ф-цию, где в проге вообще может не быть FileListBox'a. smile

Автор: efedron 4.6.2005, 10:46
Voldemar2004
добавь on local error resume next и все будет воркать smile

Автор: cardinal 4.6.2005, 13:53
Код

Option Explicit

Private Sub Command1_Click()

Dim fn As String
Dim i As Long

fn = Dir("e:\*.txt")
Do While fn <> ""
    List1.AddItem fn
    i = i + 1
    fn = Dir
Loop

Text1.Text = i

End Sub

Поставь на форму кнопку, ListBox и TextBox...

Автор: Voldemar2004 4.6.2005, 16:36
Цитата

добавь on local error resume next и все будет воркать


Это первое, что я сделал, чтобы проверить, работает оно или нет. Но хотел цивилизованным путем.

Автор: Voldemar2004 4.6.2005, 18:42
cardinal, большое спасибо.
Код

Public i As Long
Option Explicit

Private Sub Command1_Click()
i = 0
List1.Clear
MsgBox FileList(Combo2.Text, Combo1.Text) & _
"Количество файлов в папке " & Chr(34) & Combo2.Text _
& Chr(34) & " с расширением" & Combo1.Text & " = " & i
End Sub

Private Function FileList(Path As String, Ext As String) As String
Dim fn As String
fn = Dir(Path & Ext)
Do While fn <> ""
    List1.AddItem fn
    i = i + 1
    fn = Dir
Loop
End Function


В Combo2 имя диска (ну можно заменить на DriveListBox)
В Combo1 расширение (*.txt *.html *.htm и т.д.)

Поставил на форму кнопку, 2 ComboBox, ListBox

Только заметил одну вещь: если выбрать расширение htm, то будут выделены и файлы html (а нам этого не надо).
Как по простому это сделать.

Автор: cardinal 4.6.2005, 20:22
Видимо так:
Код

Option Explicit

Private Sub Command1_Click()

Dim fn As String
Dim ext As String
Dim i As Long

ext = "*.htm"
fn = Dir("e:\" & ext)
Do While fn <> ""
    If Right(fn, 3) = ext Then
        List1.AddItem fn
        i = i + 1
    End If
    fn = Dir
Loop

Text1.Text = i

End Sub

Автор: Voldemar2004 5.6.2005, 15:58
cardinal, я проверил твой код, так он не работает... smile

Код

Public i As Long
Option Explicit

Private Sub Command1_Click()    
i = 0    
List1.Clear    
MsgBox FileList(Combo2.Text, Combo1.Text) & _    
"Количество файлов в папке " & Chr(34) & Combo2.Text _    
& Chr(34) & " с расширением" & Combo1.Text & " = " & i    
End Sub

Private Function FileList(Path As String, Ext As String) As String

Dim fn As String
fn = Dir(Path & Ext)
Do While fn <> ""
    If "*" & Right(fn, 4) = Right(Ext, 5) Then
        List1.AddItem fn
        i = i + 1
    Else:

        If Right(fn, 4) = Right(Ext, 4) Then
        List1.AddItem fn
        i = i + 1
        End If
        
    End If
    fn = Dir
Loop
End Function


Вот здесь что-то не то:
Цитата

If Right(fn, 3) = ext Then


Включи точки останова, посмотри, что будет.

Автор: cardinal 5.6.2005, 16:14
Да, извини. Я просто вставил код уже в сообщение, а потом думаю, что кое-что можно изменить. Изменил и получилось, то что ты уже сказал. smile Вот что я имел в виду:
Код

Option Explicit

Private Sub Command1_Click()

Dim fn As String
Dim ext As String
Dim i As Long

ext = "htm"
fn = Dir("e:\*." & ext)
Do While fn <> ""
    If Right(fn, 3) = ext Then
        List1.AddItem fn
        i = i + 1
    End If
    fn = Dir
Loop

Text1.Text = i

End Sub

Я же в ext хочу только расширение, а не звездочки всякие...

Автор: boevik 5.6.2005, 16:26
Если extension не равен 3 буквам, то в этом месте баг
Код

If Right(fn, 3) = ext Then

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)