Переключение на Главную Страницу Страницы: 1 [2]  ОтправитьПечать
Горячая тема (более 10 ответов) FileSystemObject: как получить элемент коллекции "Files"? (число прочтений - 6045 )
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: FileSystemObject: как получить элемент коллекции "Files"?
Ответ #15 - 29. Декабря 2008 :: 09:17
Печать  
Попробовал вариант, предложенный Alex_Bob, все работает.
Но честно говоря скорость не впечатлила.
Задача была переделать код на использование FileSystemObject, вот что было:
Код
Выбрать все
Список = СоздатьОбъект("СписокЗначений");
Каталог = НормализоватьКаталог(Каталог);
Если ФС.СуществуетФайл(Каталог) > 0 Тогда
    Файл = "";	Файл = СокрЛП(ФС.НайтиПервыйФайл(Каталог+"*."+СокрЛП(РасширениеФайла)));
	Если ((ФС.СуществуетФайл(Каталог + Файл) = 1) и (Файл <> "")) Тогда
		Если ЭтоКаталог(Каталог + Файл) = 0 Тогда Список.ДобавитьЗначение(Файл); КонецЕсли;
		Файл = ""; Файл = СокрЛП(ФС.НайтиСледующийФайл());
		Пока ((ФС.СуществуетФайл(Каталог + Файл) = 1) и (Файл <> "")) Цикл
			Если ЭтоКаталог(Каталог + Файл) = 0 Тогда Список.ДобавитьЗначение(Файл); КонецЕсли;
			Файл = ""; Файл = СокрЛП(ФС.НайтиСледующийФайл());
		КонецЦикла;
	КонецЕсли;
КонецЕсли;
Возврат Список; 


вот что стало (не до конца аналогичный код, просто хотел сравнить скорость)
Код
Выбрать все
_Список = СоздатьОбъект("СписокЗначений");
_VBS.Reset();
Если _FSO.FolderExists(_Каталог) = -1 Тогда
	_Folder = _FSO.GetFolder(_Каталог);
	_VBS.AddObject("coll",_Folder.Files);
	_VBS.AddObject("e",_VBS.Eval("new Enumerator(coll)"));
	Пока _VBS.Eval("e.atEnd()") <> -1 Цикл
		_Список.ДобавитьЗначение(_VBS.Eval("e.item()").Name);
		_VBS.Eval("e.moveNext()")
	КонецЦикла;
КонецЕсли;
Возврат _Список; 


по скорости второй вариант проигрывает втрое...
  
Наверх
 
IP записан
 
Alex_Bob
Full Member
***
Отсутствует



Сообщений: 136
Местоположение: Липецк
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: FileSystemObject: как получить элемент коллекции "Files"?
Ответ #16 - 29. Декабря 2008 :: 09:49
Печать  
Конечно код не равнозначный. В первом случае сравнение по маске, во втором полный перебор коллекции. Посчитай количество итераций цикла в первом и втором случае.
  

Необходимо время, чтобы восстановить хаос. (с) Дж. Буш (младший)
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: FileSystemObject: как получить элемент коллекции "Files"?
Ответ #17 - 29. Декабря 2008 :: 11:00
Печать  
ну так я сравнивал с маской "*", т.е. все файлы.
в папке было всего файлов 10, запускал в цикле 100 раз, сравнивал время выполнения, объекты _FSO и _VBS создаются за пределами цикла.
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: FileSystemObject: как получить элемент коллекции "Files"?
Ответ #18 - 29. Декабря 2008 :: 12:32
Печать  
ФС сосет у FSO не при поиске по папкам, а на банальных записи и чтении.
  
Наверх
www  
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: FileSystemObject: как получить элемент коллекции "Files"?
Ответ #19 - 29. Декабря 2008 :: 12:55
Печать  
понял, спасибо.
для чтения и записи стараюсь использовать BinaryData, или ты имеешь ввиду копирование/перенос файлов?
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: FileSystemObject: как получить элемент коллекции "Files"?
Ответ #20 - 29. Декабря 2008 :: 13:23
Печать  
Я имею в виду запись в файл и чтение из файла.
  
Наверх
www  
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать