Поиск файлов

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

Поиск файлов

Сообщение burik » 17.08.2007 (Пт) 23:28

Помогите, пожайлуста, найти ошибку в процедуре. Она ищет файлы в установленном каталоге, заданного формата:
Код: Выделить всё

Private Sub FindFiles(ByVal strPath As String)
Dim fileName As String

    Dir strPath
    SetText fileName, Dir '<<<< Здесь возникает ошибка "Invalid procedure call or argument"
    While fileName <> ""
        If (FSO.FolderExists(strPath & fileName)) Then
            FindFiles strPath & fileName
        ElseIf (FSO.FileExists(strPath & fileName)) Then
            If LCase(Right(fileName, 4)) = "." & FileDesk Then lvDrive.ListItems.Add , , strPath & fileName
        End If
        SetText fileName, Dir
    Wend

End Sub

Процедура SetText делает некоторые операции, в том числе присваивает переменной из первого параметра (fileName) значение второго параметра.
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 18.08.2007 (Сб) 1:12

При вызове SetText, вместо этих констант:
Код: Выделить всё
vbCFLink   &HBF00   DDE conversation information
vbCFRTF   &HBF01   RichText Format
vbCFText   1   (Default) Text

Ты используешь служебное слово Dir
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 18.08.2007 (Сб) 6:21

Код: Выделить всё
LCase(Right(fileName, 4)) = "." & FileDesk
Только не говори, что так ты проверяешь расширение файла.
Процедура SetText делает некоторые операции, в том числе присваивает переменной из первого параметра (fileName) значение
второго параметра
.
Только не говори, что кроме этого она ничего не делает.
Ты используешь служебное слово Dir
Нифига это не служебное слово. Это функция рантайма.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 18.08.2007 (Сб) 8:32

burik писал(а):
Код: Выделить всё
    SetText fileName, Dir '<<<< Здесь возникает ошибка "Invalid procedure call or argument"

Процедура SetText делает некоторые операции, в том числе присваивает переменной из первого параметра (fileName) значение второго параметра.


Вообще интересно, а что же хотел таки автор таким странным образом используя метод SetText?
Весь мир матрица, а мы в нем потоки байтов!

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Сообщение burik » 18.08.2007 (Сб) 11:37

Если честно, я совсем забыл про метод SetText. SetText - это моя самописная функция.. Хакер, кроме этого она еще записывает второй параметр в отдельный массив (для последующей работы нужно), ведет лог, прогресс бар и т.п.

Сейчас я переименовал эту рпоцедуру в SetFileName, результат тот же. Меня напрегает то, что вот этот код работает:
Код: Выделить всё

Private Sub FindFiles()
Dim fileName As String

    Dir "C:\"
    SetFileName fileName, Dir
    While fileName <> ""
        Me.Print fileName
        SetFileName fileName, Dir
    Wend

End Sub
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 18.08.2007 (Сб) 20:34

А воз и ныне там... :lol:
burik, Dir нельзя использовать, как переменную. Сделай ее, ну например MyDir или MyDoDir, только не Dir, ибо это, -
функция рантайма
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

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

Сообщение tyomitch » 18.08.2007 (Сб) 20:37

Денис, ты не въезжаешь.
Перечитай его код.
Изображение

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 19.08.2007 (Вс) 1:29

Тьфу, тогда сами разбирайтесь. :evil:
Напоследок добавлю, что надо с FSO разобраться. либо вообще без него. Он мне субъективно не нравится за его глюки, прущие еще с 95 года.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 19.08.2007 (Вс) 9:56

Тьфу, тогда сами разбирайтесь. :evil:

Неадекватная реакция.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 19.08.2007 (Вс) 10:18

Денис писал(а):Напоследок добавлю, что надо с FSO разобраться. либо вообще без него. Он мне субъективно не нравится за его глюки, прущие еще с 95 года.

Какие глюки у fso? Ничего такого не слышал.
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Сообщение burik » 19.08.2007 (Вс) 21:19

Все, проблема решена. Просто в указанной папке были одни папки...
Я исправил:
Код: Выделить всё

Private Sub FindFiles(ByVal strPath As String)
Dim fileName As String

    Dir strPath,vbDirectory '<<<<<< добавил vbDirectory и все.
    SetText fileName, Dir
    While fileName <> ""
        If (FSO.FolderExists(strPath & fileName)) Then
            ReDim Preserve dirs(0 to ubound(dirs)+1)
            dirs(Ubound(dirs)) = strPath & fileName
        ElseIf (FSO.FileExists(strPath & fileName)) Then
            If LCase$(Right$(fileName, 3)) = FileDesk Then lvDrive.ListItems.Add , , strPath & fileName
        End If
        SetText fileName, Dir
    Wend

End Sub


P. S. Денис, я Dir использую именно как функцию райн-тайма Таким образом я просто получаю список файлов и папок, указанной папки.
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

oliVer
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 14.10.2007 (Вс) 9:40
Откуда: город Москва, планета Земля

Файлы из Директории? Можете помочь человеку...

Сообщение oliVer » 14.10.2007 (Вс) 10:51

Пожалуйста, скажите, как в Эксель на один Лист заимпортить мелкие (18 строк) файлики из Фолдера (Директории). Очень выручите!

Подробнее? каждый файлик (дурацкого формата Nokia .vmg) более-менее нормально выглядит в экселе:

Столбец 1, строки 1-18:

BEGIN:VMSG
VERSION:1.1
X-IRMC-STATUS:READ
X-IRMC-BOX:INBOX
X-NOK-DT:20071012T160300Z
X-MESSAGE-TYPE:DELIVER
BEGIN:VCARD
VERSION:3.0
N:
TEL:+79261234567
END:VCARD
BEGIN:VENV
BEGIN:VBODY
Date:12.10.2007 16:03:00
...A v otvet ehidny autoreply,toka v nem ne ukazano,k komu obrashatsya v slu4ae,esli sosku4ilsya
END:VBODY
END:VENV
END:VMSG


Если бы в столбец 2 закачался следующий файлик из этой же Директории, и так далее, пока все до последнего не заимпортировались (да их не много, 147 - должно хватить столбиков).

То наступило бы счаздье! понимаете?

PS: Кроме вас мне не к кому обратиться: разругались со всеми айтишниками. Ибо я юзер, и тест полуфабрикатов задолбал.
Они даже переменные не проверяют - в одном приложении число с Кучей Знаков допустимо, а в другом, где используется эта же переменная, программа даёт сбой (рандомное отрицательное число). Разве это справедливо, что юзер, который и так в 10 вечера сваливает домой (а они в 6) должен строить в меру собственного понимания (эконом. фак) схемы взаимодействия приложений, припоминая школьный курс по QB? ..Чтобы убедиться, что продукт, который пойдёт на Продакшн не будет козлиться..
Мир не идеален? За дело, вперёд!

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Сообщение burik » 14.10.2007 (Вс) 14:52

oliVer, а причем тут VB и тем более эта тема?
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

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

Сообщение RayShade » 14.10.2007 (Вс) 16:03

Я бы сделал как то так

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




fso = createobject("scripting.filesystemobject)



files=fso.getfolder("c:\").files



for i=1 to files.count



file = fso.getfile(files.item(i).path).openastextstream



r=1

do while not file.eof

activesheet.cells(r,i)=file.readline

r=r+1

loop



next i



I don't understand. Sorry.

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

Сообщение kibernetics » 16.10.2007 (Вт) 15:27

fso must be replaced

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 16.10.2007 (Вт) 17:42

Ever.

;)
Изображение


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

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

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 36

    TopList