![]() |
![]() |
![]() |
|
Как читать постоянно дописываемый файл? | ☑ | ||
---|---|---|---|---|
0
RomaH
naïve
05.05.17
✎
10:40
|
Есть текстовый файлик куда постоянно пишутся данные сторонней программой
как его в 1С постоянно мониторить? |
|||
1
Dmitry1c
05.05.17
✎
10:48
|
(0) как ты думаешь, почему придумали СУБД?
|
|||
2
Fedor-1971
05.05.17
✎
10:49
|
(0) как данные пишутся внешней программой?
1. Открыла-записала-Закрыла - как удобнее, открыл для чтения, прочитал, закрыл. Можешь через параметры файла (время последнего обращения) отмониторить было что-то дописано или нет 2. Открыла-пишем, пишем, пишем. По сути ни как, т.к. нет уверенности что там что-то вообще есть и попало ли это "что-то" на диск |
|||
3
polosov
05.05.17
✎
10:49
|
(0) Если сторонний соф нельзя научить писать в БД, то наверно можно делать типа снапшот файла, предварительно скопировав его во временный файл и обрабатывать. И так перед каждым чтением.
|
|||
4
Fedor-1971
05.05.17
✎
10:51
|
(1) для структурованного хранения информации, совместный доступ к файлам БД появился позже, когда попытались одновременно записать данные несколько человек
|
|||
5
Fedor-1971
05.05.17
✎
10:52
|
(3) если в него пишут в этот момент что получится во временном файле?
|
|||
6
бомболюк
05.05.17
✎
10:53
|
(5) в файловых операциях тоже есть блокировки ;-)
|
|||
7
mehfk
05.05.17
✎
10:54
|
(5) Пусть программа лочит файл.
|
|||
8
Fedor-1971
05.05.17
✎
11:00
|
(6)(7) мы не знаем что за ПО пишет в файл и может ли оно его лочить.
Скопировать открытый для записи файл можно (только много ли в этом смысла), переместить нет. Т.е. в (2) ситуация п.1, в период "файл закрыт", его можно переместить, для ситуации п.2 переместить нельзя, но можно скопировать, только нет уверенности, что буфер записи сброшен на диск |
|||
9
Fedor-1971
05.05.17
✎
11:03
|
8+ Если допустимо, то самый правильный вариант перемещать файл во временный каталог, обрабатывать его и опять по кругу.
Есть гарантия, что мы получили новую порцию полностью дописанных данных |
|||
10
бомболюк
05.05.17
✎
11:14
|
вариант для продвинутых: подсунуть сторонней программе вместо имени файла имя именованного канала, пусть бомбит в него, а канал слушать через ВК. В качестве средства межпроцессного взаимодействия named pipes идеально подходят.
|
|||
11
mehfk
05.05.17
✎
11:34
|
(8) Если сторонняя программа так небрежно относится к своим файлам, то ее нужно заменить :)))
|
|||
12
RomaH
naïve
05.05.17
✎
12:18
|
нормально все работает:
&НаКлиенте Перем Текст; &НаКлиенте Перем Стр; &НаКлиенте Процедура ПрочитатьФайл(Команда) Текст = Новый ЧтениеТекста("\\tda600x\PBX.log\05.05.2017.log",,,,Ложь); Стр = Текст.ПрочитатьСтроку(); ТекстАТС.ДобавитьСтроку(Стр); Пока Стр <> Неопределено Цикл Пока СтрДлина(Стр) < 80 Цикл ПодключитьОбработчикОжидания("ПродолжитьЧтениеФайла",0.5,Истина); Возврат; КонецЦикла; ТекстАТС.ВставитьСтроку(1,Стр); Стр = Текст.ПрочитатьСтроку(); ОбработкаПрерыванияПользователя(); КонецЦикла; ПодключитьОбработчикОжидания("ПродолжитьЧтениеФайла",1,Истина); КонецПроцедуры &НаКлиенте Процедура ДописатьСтроку() Пока СтрДлина(Стр) < 80 Цикл Стр = Стр + Текст.ПрочитатьСтроку(); ОбработкаПрерыванияПользователя(); КонецЦикла; ТекстАТС.ВставитьСтроку(1,Стр); ПодключитьОбработчикОжидания("ПродолжитьЧтениеФайла",1,Истина); КонецПроцедуры &НаКлиенте Процедура ПродолжитьЧтениеФайла() Стр = Текст.ПрочитатьСтроку(); ТекстАТС.ДобавитьСтроку(Стр); Пока Стр <> Неопределено Цикл Пока СтрДлина(Стр) < 80 Цикл ПодключитьОбработчикОжидания("ПродолжитьЧтениеФайла",0.5,Истина); Возврат; КонецЦикла; ТекстАТС.ВставитьСтроку(1,Стр); Стр = Текст.ПрочитатьСтроку(); ОбработкаПрерыванияПользователя(); КонецЦикла; ПодключитьОбработчикОжидания("ПродолжитьЧтениеФайла",1,Истина); КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |