Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с FSO, Ошибка при вызове Item(i) 
V
    Опции темы
FallFan
Дата 30.3.2008, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 30.3.2008
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Всем доброго времени суток.
Суть проблемы: Есть форма, на форме есть некий Label1, необходимо передать на него например имя файла (или его полный путь, или дату создания и т.д.) из указанной папки ( при этом о файле ничего заранее неизвестно). Т.е. в коде это выглядит примерно так:

Код

Dim MainFSO As New FileSystemObject
Dim MainFolder As Folder
Dim ServerDirPath as string

ServerDirPath = "C:\ProgTest"

Set MainFolder = MainFSO.GetFolder(ServerDirPath)

Label1.caption = MainFolder.SubFolders.Item(1).Files.Count                       '1
Label1.caption = MainFolder.SubFolders.Item(1).Path                                 '2
Label1.caption = MainFolder.SubFolders.Item(1).Files.Item(1).DateCreated   '3


1 - Запись количества файлов в первой директории папки "C:\ProgTest"
2- Запись пути первой директории папки "C:\ProgTest"
3 - Запись Даты создания первого файла в первой директории папки "C:\ProgTest"

Вроде бы все должно работать ( даже тип данных совпадает) , но при компиляции пишет 
"Run-time error '5': Invalid procedure call or argument"

Как не пытаюсь выудить инфу, все не получается. Чувствую загвоздка в пустяке, но не могу его найти .
Помогите пожалуйста. Заранее спасибо. 



PM   Вверх
I_Am_Rock
Дата 30.3.2008, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 523
Регистрация: 18.1.2008

Репутация: 12
Всего: 15



Я тестил ваш код...

С чего вы взяли, что если написать Item(1), то будет возвращена первая папка?
В итеме, мне кажется, можно указывать папки только названиями, например, Item("Новая папка")
В этом случае всё работает...
PM MAIL WWW   Вверх
Rrader
  Дата 30.3.2008, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 6
Всего: 191



В скобках нужно указывать пути в кавычках, насколько мне известно. Рекомендуется с FSO работать через For..Each. Просто заводи индексацию или флаг...

Вот твой код:
Код

Private Sub Command1_Click()
  Dim MainFSO As New FileSystemObject
  Dim Flds As Folders
  Dim Fls As Files
  Dim FirstFolder As Boolean
  Dim ServerDirPath As String
  
  ServerDirPath = "C:\ProgTest"
  FirstFolder = True
  
  Set Flds = MainFSO.GetFolder(ServerDirPath).SubFolders
  
  For Each F In Flds
    If FirstFolder Then
      FirstFolder = False
      Label1.Caption = F.Files.Count ' 1
      Label1.Caption = F.Path ' 2
      Set Fls = MainFSO.GetFolder(F.Path).Files
      For Each F2 In Fls
        Label1.Caption = F2.DateCreated ' 3
      Next
    End If
  Next

End Sub


Это сообщение отредактировал(а) Rrader - 30.3.2008, 18:06


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
FallFan
Дата 30.3.2008, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 30.3.2008
Где: Санкт-Петербург

Репутация: нет
Всего: нет



2 I_Am_Rock  

Если загнать в Wathes, то видно, что Item имеет индентификатор число, а не строку (проверь, удивишся), 
при этом номер начинается с 1 ( а не с 0 !! )))

Rrader 

Ok спасибо, на тесте...
PM   Вверх
FallFan
Дата 30.3.2008, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 30.3.2008
Где: Санкт-Петербург

Репутация: нет
Всего: нет



2 Rrader  

Спасибо за код, он мне очень поможет.
В принципе тема раскрыта для меня, но есть один вопрос:
1. Зачем проверка на FirstFolder ?
2. Зачем проверка, если она отключается FirstFolder = False
PM   Вверх
Rrader
  Дата 30.3.2008, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 6
Всего: 191



Немного отредактировал код. Нелогично было.

По теме:

Цитата

1. Зачем проверка на FirstFolder ?


Чтобы сделать выход из цикла. Здесь нас интересует только первая поддиректория.  (первая - в смысле по алфавиту в имени).

Для первого файла нужно во вложенном цикле смотреть номер итерации. Лучше целочисленный итератор завести...

Это сообщение отредактировал(а) Rrader - 30.3.2008, 18:15


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
FallFan
Дата 3.4.2008, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 30.3.2008
Где: Санкт-Петербург

Репутация: нет
Всего: нет



OK Все понял.
Всем спасибо )))
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0476 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.