Определение в CLARION открытия "не родных" файлов на сети.
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Определение в CLARION открытия "не родных" файлов на сети.
Занимаюсь модулем документооборота, поэтому из Clarion на рабочих станциях постоянно корректируется и открывается множество “не родных” файлов (*.doc, *.html, *.xls, *.txt) на сети. Каким образом, ( либо WinApi или другим способом), можно определить в Clarion, работая на определенной станции, что данные вышеперечисленные файлы уже открыты с других рабочих станций сетки.
- Игорь Столяров
- Ветеран движения
- Сообщения: 8034
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Re: Определение в CLARION открытия "не родных" файлов на сети.
Добрый день !
Объяви DOS файл, присвой ему полное имя проверяемого документа и сделай попытку
открытия в монопольном режиме (OPEN). Если файл уже открыт - получишь ошибку.
Если файл свободен - просто закрой его. Все ...
Объяви DOS файл, присвой ему полное имя проверяемого документа и сделай попытку
открытия в монопольном режиме (OPEN). Если файл уже открыт - получишь ошибку.
Если файл свободен - просто закрой его. Все ...
Make Clarion Great Again ! 
Re: Определение в CLARION открытия "не родных" файлов на сети.
Добрый день, Игорь.
Просто ОPEN(oм) не совсем удобно, их много файлов, и для каждого надо объявлять DOS-file. Может быть ситуация, что некоторое подмножество "не родных файлов" надо открыть одновременно.
Просто ОPEN(oм) не совсем удобно, их много файлов, и для каждого надо объявлять DOS-file. Может быть ситуация, что некоторое подмножество "не родных файлов" надо открыть одновременно.
- Игорь Столяров
- Ветеран движения
- Сообщения: 8034
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Re: Определение в CLARION открытия "не родных" файлов на сети.
Здесь же речь идет не об одновременном открытии,а о последовательной проверке статуса файлов.
Т.е. определяется список необходимых файлов, например в очереди, и потом последовательно для
каждой записи устанавливается ее статус ... Впрочем - Вам видней, исходя из функционала ...
Т.е. определяется список необходимых файлов, например в очереди, и потом последовательно для
каждой записи устанавливается ее статус ... Впрочем - Вам видней, исходя из функционала ...
Make Clarion Great Again ! 
Re: Определение в CLARION открытия "не родных" файлов на сети.
Добрый день!
Спасибо, попробую. Думаю получится, все файлы посредством очереди, открыть в монопольном режиме.
Спасибо, попробую. Думаю получится, все файлы посредством очереди, открыть в монопольном режиме.

Re: Определение в CLARION открытия "не родных" файлов на сети.
Всем добрый вечер!
Столкнулся с тем, что какой-то *.doc (например sample.doc) файл, находящийся в сети, открыли в Open(ом) в монопольном режиме при объявлении его DOS-файлом в *.dct, и выключили рабочую станцию на холодным рестартом. И после перезагрузки, в сети файл вышеупомянутый sample.doc все еще был занят в монопольном режиме.
Это не совсем удобно.
Столкнулся с тем, что какой-то *.doc (например sample.doc) файл, находящийся в сети, открыли в Open(ом) в монопольном режиме при объявлении его DOS-файлом в *.dct, и выключили рабочую станцию на холодным рестартом. И после перезагрузки, в сети файл вышеупомянутый sample.doc все еще был занят в монопольном режиме.
Это не совсем удобно.
- WadimZapara
- Активист
- Сообщения: 181
- Зарегистрирован: 11 Июнь 2008, 12:11
- Откуда: Тамбов
Re: Определение в CLARION открытия "не родных" файлов на сети.
Можно попробовать функцию FileIsOpened() на основе WinAPI-вызова, например, в следующем коде:
Код: Выделить всё
MAP
MODULE('Windows.DLL')
GetLastError(),LONG,PASCAL,Dll(TRUE)
CreateFile(*CString lpFileName, ULONG dwDesiredAccess, ULONG dwShareMode, |
ULONG Addr_SecurityAttributes=0, ULONG dwCreationDisposition, ULONG dwFlagsAndAttributes, |
UnSigned hTemplateFile=0),UnSigned, PASCAL,RAW,Name('CreateFileA'),DLL(TRUE)
END
END
FileIsOpened FUNCTION(CString FileName) !, Byte
IS_OK Equate(1)
IS_LockedOrNotFound Equate(0)
GENERIC_READ EQUATE(80000000h)
OPEN_EXISTING Equate(3)
FILE_ATTRIBUTE_NORMAL EQUATE(00000080h)
FILE_SHARE_READ Equate(1)
FILE_SHARE_WRITE Equate(2)
FILE_SHARE_BOTH Equate(FILE_SHARE_READ+FILE_SHARE_WRITE)
INVALID_HANDLE_VALUE Equate(0FFFFFFFFh)
ret Byte(IS_LockedOrNotFound)
hFile UnSigned
CODE
hFile = CreateFile(FileName, GENERIC_READ, FILE_SHARE_BOTH, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL)
If hFile <> INVALID_HANDLE_VALUE Then ! Нет ошибки
ret = IS_OK
! ELSE !для уточнения, почему сейчас не открылся можно использовать GetLastError()
End
RETURN (ret)
Компьютер имеет то преимущество перед мозгом, что им пользуются...
Re: Определение в CLARION открытия "не родных" файлов на сети.
Добрый день!
Вадим, спасибо за совет. Я попробую Ваш вариант.
Вадим, спасибо за совет. Я попробую Ваш вариант.
- WadimZapara
- Активист
- Сообщения: 181
- Зарегистрирован: 11 Июнь 2008, 12:11
- Откуда: Тамбов
Re: Определение в CLARION открытия "не родных" файлов на сети.
Прошу прощения, Антон, ошибочка малая вышла.
Открывать в монополе надо вызовом:
Открывать в монополе надо вызовом:
Код: Выделить всё
hFile = CreateFile(FileName, GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL)
Компьютер имеет то преимущество перед мозгом, что им пользуются...
- WadimZapara
- Активист
- Сообщения: 181
- Зарегистрирован: 11 Июнь 2008, 12:11
- Откуда: Тамбов
Re: Определение в CLARION открытия "не родных" файлов на сети.
Привет. Надо ли говорить, Антон, что закрытие открытого таким образом файла выглядит так:
Код: Выделить всё
BOOL EQUATE(SIGNED)
MAP
MODULE('Windows.DLL')
CloseHandle(UnSigned), BOOL, pascal,Dll(TRUE), Proc
END
END
CODE
CloseHandle(hFile) ! где hFile из предыдущего примера
Компьютер имеет то преимущество перед мозгом, что им пользуются...
Re: Определение в CLARION открытия "не родных" файлов на сети.
Привет.
Я понимаю, что CloseHandle(hFile) может закрыть файл, открытый в монопольном режиме.
Я понимаю, что CloseHandle(hFile) может закрыть файл, открытый в монопольном режиме.
- WadimZapara
- Активист
- Сообщения: 181
- Зарегистрирован: 11 Июнь 2008, 12:11
- Откуда: Тамбов
Re: Определение в CLARION открытия "не родных" файлов на сети.
всё хорошо ? проблема решена ?
если так, - я рад, что смог помочь
если так, - я рад, что смог помочь
Компьютер имеет то преимущество перед мозгом, что им пользуются...