Имя: Пароль:
IT
Админ
Как из 1С проверить быстро наличие файлов по списку ? быстрее ФС.СуществуетФайл
0 Холст
 
17.06.16
00:26
сабж
имеем список с именами и путями файлов, может WinAPI или чтото подобное позволяет списком сразу проверить наличие файлов а не по одному
1 Звездец
 
17.06.16
00:26
спросить у батника, который проверит быстрее
2 Garykom
 
гуру
17.06.16
00:32
(1)
Я спросил у батника,
Где мои любимые?
Файлики из списочка?
3 Звездец
 
17.06.16
00:36
(2) либо VB, смотря что ближе. Или подождать местного Net-гуру, как раз для него темка. Вот будет ли быстрее это вопрос
4 Холст
 
17.06.16
00:38
батник тоже будет пофайлово спрашивать у файловой системы о наличии файла
может WMI/WinApi позволяет обратиться сразу списком одним обращением ?
5 Garykom
 
гуру
17.06.16
00:39
(3) ФС. она такая 77 что и на Win95 как бы пашет, но вот гуру там свое не сможет запустить ну никак. Хотя если убьет 10-ок лет переписав .net ))
6 Холст
 
17.06.16
00:39
батник
echo off
set list=%~1\FNames.txt
if exist "%list%" (
    for /f "delims=" %%A in (%list%) do (
      if not exist "%~1\%%A" echo %%A не существует
    )
    pause
  ) else (
    dir /b>"%list%"
)
7 H A D G E H O G s
 
17.06.16
00:40
(4) Нет такого. Только
FindFirstFile()
8 Garykom
 
гуру
17.06.16
00:40
(4) Все намного проще, делаем dir/w для каталога (понятно что лучше винапи), получаем список имен файлов и в 1С тупо сравниваем.
9 H A D G E H O G s
 
17.06.16
00:41
(8) Да можно просто НайтиФайлы()
10 Звездец
 
17.06.16
00:41
(4) а как ты хотел? все равно система будет искать файлы поочередно, разница может будет только в скорости выполнения
11 Garykom
 
гуру
17.06.16
00:42
(9) Так я походу 77 начал забывать уже ((
12 Звездец
 
17.06.16
00:42
(8) но опять же, имеем список, но на 77 сравнить вхождение одного списка в другой тоже придется перебирать
13 Garykom
 
гуру
17.06.16
00:46
(12) Кто сказал такую глупость? Сливаем списки, добавляем колонку колв-во =1 и ТЗ.Свернуть(...
14 Torquader
 
17.06.16
00:48
Получается, что быстрее https://msdn.microsoft.com/en-us/library/aa364418(VS.85).aspx ничего не будет, если грамотно передать параметры поиска.
15 Звездец
 
17.06.16
00:49
(13) ну кстати да, причем отработает довольно быстро. Осталось узнать что от этого ТС хочет, потому как вариантов результата будет довольно много и их еще придется обработать
16 Torquader
 
17.06.16
00:49
Потом, одно дело, когда у вас в директории несколько тысяч файлов и нужно найти среди них какие-то 10 - тогда перебор со списком будет не очень.
17 Garykom
 
гуру
17.06.16
00:50
(16) Верное замечание, нуна больше инфы.
18 Torquader
 
17.06.16
00:50
А, я ещё забыл про WMI и Select * from Win32_DataFile и условие поставить правильно.
19 Torquader
 
17.06.16
00:54
И не забывайте, что у (0) "с именами и путями" - они не в одной директории, то есть FindFirstFile может не спасти.
20 Torquader
 
17.06.16
00:56
Просто, GetFileAttributes("\?\ИмяФайла" будет быстрее, так как NTFS содержит индексированные директории.
21 Холст
 
17.06.16
01:18
Задача проверить наличие файлов сертификатов в папке по списку хранимому в 1С

способ сначал получить список имеющихся файлов потом сравнить список с искомым списком должно быть быстро

Dir отрабатывает быстро, WMI пишут нежелательно тк у юзера может не быть прав к WMI
какой аналог Dir/s (получить список файлов желательно с подпапками) в FSO чтобы без DOSокна было ?
22 Звездец
 
17.06.16
01:22
(21) под сертификатами ты имеешь ввиду файлы картинок? Может не стоит заморачиваться и проверять ночью регламентным заданием
23 Garykom
 
гуру
17.06.16
01:22
24 Холст
 
17.06.16
01:23
если я верно понял, FindFirstFile  делает выборку, а последущие FindNextFile  не делает обращение к жесткому диску
25 Холст
 
17.06.16
01:29
(22) ночью неспеша это понятно
26 Torquader
 
17.06.16
01:37
(24) Она открывает выборку, а остальные по ней перемещаются.
Насколько я понимаю, у всех есть некоторый аналог IEnumVariant, где есть перебор.

Ну, если просто хочется перебрать, то Scripting.FileSystemObject потом GetFolder и коллекция Files
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн