|
Отслеживание файлов | ☑ | ||
---|---|---|---|---|
0
Галка
14.11.07
✎
11:46
|
Уважаемые профессионалы! Помогите!
Мне необходимо отслеживать появление файла в каталоге Windows (без использования обработки ожидания). Нашла ВК "Отслеживание изменений в файловой системе и программирование потоков (threads)" ( Книга знаний: Отслеживание изменений в файловой системе и программирование потоков (threads)), но данная ВК, отслеживает любые изменения в папке, а мне необходимо только появление файла. Передала данную ВК нашему админу, он мне вернул следующее инфо: FILE_NOTIFY_CHANGE_FILE_NAME соответствует событиям переименования, создания или удаления файла Чтобы определить тип произошедшего действия, нужно получить дополнительную информацию из структуры Type PFileNotifyInformation=^TFileNotifyInformation; Пример кода на паскале: case PFileNotifyInformation(Ptr).Action of FILE_ACTION_ADDED : Item.SubItems.Add('Файл был создан'); FILE_ACTION_REMOVED : Item.SubItems.Add('Файл был удален'); FILE_ACTION_MODIFIED : Item.SubItems.Add('Файл был изменен'); FILE_ACTION_RENAMED_OLD_NAME : Item.SubItems.Add('Файл был переименован и в имени файла - предыдущее имя'); FILE_ACTION_RENAMED_NEW_NAME : Item.SubItems.Add('новое имя после переименования'); else Item.SubItems.Add('Произошло что-то странное'); end; Подскажите плз, насколько возможно использовать данную функцию непосредственно в 1С? Или необходимо все таки исправлять ВК? |
|||
1
ТелепатБот
14.11.07
✎
11:46
|
||||
2
Галка
14.11.07
✎
11:49
|
(1) Нет, внешняя компонента работает, все хорошо. Проблема только в том, что она делает больше того что необходимо.
|
|||
3
Галка
14.11.07
✎
11:55
|
Неужели никто ничего не может сказать по данному вопросу?
|
|||
4
YF
14.11.07
✎
12:01
|
(0) А чем обработка ожидания не катит?
|
|||
5
Галка
14.11.07
✎
12:03
|
(4) Файл может появлять очень часто(раз в минуту), а может не появляться сутки. Поэтому нет смысла, все время опрашивать каталог.
|
|||
6
YF
14.11.07
✎
12:05
|
(5) А ты думаешь ВК что делает? Она ведь тоже опрашивает каталог, ИМХО.
|
|||
7
zenik
14.11.07
✎
12:05
|
Если не секрет, что делает 1С когда появляется этот файл?
з.ы. Опрос раз в минуту наличия файла - не напрягает. |
|||
8
Галка
14.11.07
✎
12:07
|
(6) Мне кажется с использованием VK, это не затрагивает базу 1С.
|
|||
9
Галка
14.11.07
✎
12:09
|
(7) Запускается процедура обработки данного файла (заполнение документов результатами из файла)
|
|||
10
YF
14.11.07
✎
12:11
|
(8) А как ОбработкаОжидания() затрагивает?
|
|||
11
Галка
14.11.07
✎
12:17
|
(10) Раз в минуту обращается к каталогу, проверяет наличие необходимого файла и на все это тратит время. Давайте не будем обсуждать обработку ожидания.
|
|||
12
zenik
14.11.07
✎
12:18
|
(9) Не заморачивайся... Если не хочешь напрягать пользователя - запусти 1С с системным пользователем, у которого будет крутится обработкаОжидания и под этим пользователем и будут создаваться документы. Никто ничего не заметит ;)
|
|||
13
перцептрон
14.11.07
✎
12:19
|
(2) она полюбому будет делать больше чем надо. Винда так сделана
|
|||
14
dk
14.11.07
✎
12:20
|
Пойдем с другой стороны, а как 1с узнает, что наступило событие в ВК? :)
|
|||
15
Галка
14.11.07
✎
12:21
|
(12) Нет, не получится. При создании в документе и в каждой заполненной строке прописывается кто создал и кто заполнил, а также еще фиксируется кто изменил. Т.е. должно стоять имя того пользователя, который работает.
|
|||
16
zenik
14.11.07
✎
12:21
|
для примера, вот эта процедура у меня вызывается раз в минуту:
Процедура ЗавершитьРаботу() // В каталоге базы ФайлФлаг=КаталогИБ()+"close"; Если ФС.СуществуетФайл(ФайлФлаг)=1 Тогда ОбработкаОжидания("ЗавершитьРаботуПауза",300); Сообщить("Внимание! По инициативе администратора через 5 минут |1С:Предприятие будет закрыто. Сохраните все документы, |в противном случае они будут утеряны. | |Попытаться возобновить работу можно будет через 15 минут.","!!!"); КонецЕсли; // В каталоге пользователя ФайлФлаг=КаталогПользователя()+"close"; Если ФС.СуществуетФайл(ФайлФлаг)=1 Тогда ПринудительноЗакрытьПрограмму=1; ЗавершитьРаботуСистемы(0); КонецЕсли; КонецПроцедуры В базе 30 человек сидит, никто не напрягается. зы. можешь замерить отладчиком, сколько милисекунд будет тратиться на такую проверку... Не напрягает совершенно. Через ВК будет тоже самое, только гемора больше. |
|||
17
zenik
14.11.07
✎
12:23
|
(15) Эти данные можно добавить в сам файл, который опрашиваешь
|
|||
18
Галка
14.11.07
✎
12:26
|
Просто я предлагала обработку ожидания директору и ему не понравилось, что до обработки файла нужно еще ждать. Ему необходимо все и сразу :(
|
|||
19
перцептрон
14.11.07
✎
12:26
|
(14) ОбработкаВнешнегоСобытия()
|
|||
20
перцептрон
14.11.07
✎
12:28
|
(18) никогда не обсуждай с начальством как ты будешь что то ревлизовывать.
|
|||
21
у лю 427
14.11.07
✎
12:28
|
Просьба к автору ветки - скинуть ВК на почту...
С народа не читается - говорит, нет страницы.... адрес - karkarde@pisem.net |
|||
22
Галка
14.11.07
✎
12:29
|
(19) В 1С все обработки у меня написаны и хорошо работают, проблема только в том, что процедура срабатывает когда файл удаляется и переименовывается. А функцию FILE_NOTIFY_CHANGE_FILE_NAME, которую мне дал админ можно вставить в 1с?
|
|||
23
у лю 427
14.11.07
✎
12:35
|
спасибо. Пришло....
Щас тут кадра озадачу переделкой.... |
|||
24
у лю 427
14.11.07
✎
12:36
|
Пусть учится.... ученик хренов...
|
|||
25
перцептрон
14.11.07
✎
12:36
|
(22) ВК не передает в 1с параметр указывающий на конкретное событие?
|
|||
26
Галка
14.11.07
✎
12:38
|
(25) Да, она только передает, что какое-то событие произошло, а какое конкретно не указано.
|
|||
27
Галка
14.11.07
✎
12:41
|
(24) ОГРОМНОЕ СПАСИБО!
|
|||
28
перцептрон
14.11.07
✎
12:46
|
(26) Если нет исходников ВК, то можно хранить в 1с список файлов и сверять его с файлами каталога
|
|||
29
Галка
14.11.07
✎
12:53
|
(28) В данном каталоге при условии нормальной работы, с большой долей вероятности может только находится один файл с каждого прибора. Потому что после обработки файла я его перезаписываю в другое место.
|
|||
30
Кураж
14.11.07
✎
13:01
|
(0) В топку ВК и ОбработкуОжидания туда же! События WMI - рулят.
|
|||
31
у лю 427
14.11.07
✎
13:13
|
упс....
чела на месте нет.... (24) в общем, лично я поправить ВК сейчас не смогу - нет установленной делфи... Править надо именно ВК - сейчас она просто фиксирует факт изменения каталога админ дал правильную наводку, как разобраться детально - какое событие произошло.... надо вставить это в ВК и пересобрать проект |
|||
32
перцептрон
14.11.07
✎
13:20
|
(31) "упс.... чела на месте нет...."
хехе. А сам чо слабенький? :) |
|||
33
pectopatop
14.11.07
✎
13:21
|
киньте ВК или сюда (ссылку)
или на почту pectopatop(at)mail.ru |
|||
34
pectopatop
14.11.07
✎
13:29
|
ROMIX , http://x-romix.narod.ru/ - "Сайт временно закрыт".
уже вроде с недельку.. забанили что ли? =) |
|||
35
Галка
14.11.07
✎
13:30
|
(33) отправила. Заранее спасибо
|
|||
36
у лю 427
14.11.07
✎
13:30
|
(32) рожать дистрибутивы дельфи еще не научен....
P.S. кстати, админ эту функцию просто спер на одном из сайтов по дельфи из примера.... (33) щас перекину.... |
|||
37
у лю 427
14.11.07
✎
13:32
|
кинул
кстати, вот пример такого сайта http://www.delphisources.ru/pages/faq/base/read_directory_changes_w.html |
|||
38
у лю 427
14.11.07
✎
13:35
|
||||
39
Галка
14.11.07
✎
13:43
|
(38) Что можно сказать по этому поводу... Урод наш админ... Лишь бы только чем-нибудь отмазаться... :( Я его эту ВК уже месяц прошу доделать, и вот какой результат... :((( Спасибо.
|
|||
40
у лю 427
14.11.07
✎
13:48
|
почитала? Я тоже удивился...
А всего то полез искать другие значения FILE_NOTIFY_CHANGE_FILE_NAME Делфей то нет - нет и хелпа.... кинешь правленую ВК на меня ? |
|||
41
Галка
14.11.07
✎
13:57
|
(40) если чудо свершится, обязательно. Оставь майл.
|
|||
42
у лю 427
14.11.07
✎
14:13
|
(41) --- адрес см 21 пост....
если чудо тебе не снизойдет - я заказал на завтра дистрибутив (но только вечером будет)... Сделаю... |
|||
43
Галка
14.11.07
✎
14:24
|
(42) Спасибо. Если у меня появится раньше, скину.
|
|||
44
pectopatop
14.11.07
✎
14:26
|
(43), (42) - проверьте ящики
|
|||
45
Галка
14.11.07
✎
14:37
|
(44) Прошу прощения, но мне не дошло :(
|
|||
46
Галка
14.11.07
✎
14:38
|
Мой Mail: sppt@yandex.ru
|
|||
47
pectopatop
14.11.07
✎
14:41
|
(46) намбер ту..
|
|||
48
Галка
14.11.07
✎
14:48
|
(47) Это конечно смешно, но не доходит может яндекс не пропускает? Файл случайно не .EXE или .dll? Если не сложно, можно еще раз в архиве,и копию на galina@atlant.ru
|
|||
49
pectopatop
14.11.07
✎
14:53
|
http://pectopatop.narod.ru/vk_ChangeNotification2.rar
В общем, если файл копируется в папку откуда-то извне, или меняется - то событие отработает. Если создается прямо в папке - то нет. (Т.к. перенавесил событие на изменение времени последней модификации.) |
|||
50
pectopatop
14.11.07
✎
14:57
|
(48) не хотите ли подождать товарища "у лю 427" ? =)
|
|||
51
Галка
14.11.07
✎
15:03
|
(49)ОГРОМНЕЙШЕЕ СПАСИБО!!!
|
|||
52
у лю 427
14.11.07
✎
15:34
|
нифига... Не отрабатывает ни одно событие
- ни удаление, ни создание, ни копирование, ни пересылка... старая ВК (от ромикса) все ловит |
|||
53
у лю 427
14.11.07
✎
15:37
|
кстати, по времени - сколько ждать?
|
|||
54
FreeFin
14.11.07
✎
15:46
|
Стыбрено с коденета:
содержимое файла.vbs Dim strFile, strTemp Dim x, y Dim objWMI, objEventsCollection, objEvent, objFS Const strSourceDirWMI = "C:\\\\Temp" Const strSourceDir = "C:\Temp\" Const timeVal = "3" 'On Error Resume Next Set objFS = CreateObject("Scripting.FileSystemObject") If objFS.FolderExists(strSourceDir) Then Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") Set objEventsCollection = objWMI.ExecNotificationQuery _ ("SELECT * FROM __InstanceCreationEvent WITHIN " & timeVal & " WHERE " _ & "Targetinstance ISA 'CIM_DirectoryContainsFile' and " _ & "TargetInstance.GroupComponent= " _ & "'Win32_Directory.Name=""" & strSourceDirWMI & """'") Do Set objEvent = objEventsCollection.NextEvent strTemp = objEvent.TargetInstance.PartComponent x = InStrRev(strTemp, "\") y = Len(Mid(strTemp, x + 1)) - 1 strFile = Mid(strTemp, x + 1, y) MsgBox "Появился новый файл: " & strFile, vbInformation 'Здесь можно предусмотреть процедуру выхода из бесконечного цикла Loop Else MsgBox "Не обнаружен наблюдаемый каталог.", vbCritical End If Set objFS = Nothing Set objEvent = Nothing Set objEventsCollection = Nothing Set objWMI = Nothing |
|||
55
pectopatop
14.11.07
✎
15:48
|
(52) а попробуй (для интереса) поменять времени последней модификации файла..
|
|||
56
pectopatop
14.11.07
✎
15:49
|
(55) + у меня работает. нормально. хз в чем там дело.
я умываю руки ))) |
|||
57
Галка
14.11.07
✎
16:01
|
Нет, исправленная ловит, но только если файл копируется или вносятся изменения в файл и он закрывается через крестик ьез предварительного сохранения.
|
|||
58
у лю 427
14.11.07
✎
17:14
|
(55) меняешь время - ловит....
причем как то непонятно - изредка не ловит.... P.S. у меня время последнего доступа отключено для ускорения работы файловой системы... |
|||
59
у лю 427
14.11.07
✎
17:15
|
копируемый файл - не ловит (копируется фаром)
|
|||
60
у лю 427
14.11.07
✎
17:17
|
ладно, не заморачивайся - завтра бум разбираться...
|
Форум | Правила | Описание | Реклама | Секции | Поиск | Книга знаний | Вики-миста |