Страница 1 из 1
Определение в CLARION открытия "не родных" файлов на сети.
Добавлено: 10 Сентябрь 2008, 13:47
Aнтон87
Занимаюсь модулем документооборота, поэтому из Clarion на рабочих станциях постоянно корректируется и открывается множество “не родных” файлов (*.doc, *.html, *.xls, *.txt) на сети. Каким образом, ( либо WinApi или другим способом), можно определить в Clarion, работая на определенной станции, что данные вышеперечисленные файлы уже открыты с других рабочих станций сетки.
Re: Определение в CLARION открытия "не родных" файлов на сети.
Добавлено: 10 Сентябрь 2008, 14:26
Игорь Столяров
Добрый день !
Объяви DOS файл, присвой ему полное имя проверяемого документа и сделай попытку
открытия в монопольном режиме (OPEN). Если файл уже открыт - получишь ошибку.
Если файл свободен - просто закрой его. Все ...
Re: Определение в CLARION открытия "не родных" файлов на сети.
Добавлено: 10 Сентябрь 2008, 14:45
Aнтон87
Добрый день, Игорь.
Просто ОPEN(oм) не совсем удобно, их много файлов, и для каждого надо объявлять DOS-file. Может быть ситуация, что некоторое подмножество "не родных файлов" надо открыть одновременно.
Re: Определение в CLARION открытия "не родных" файлов на сети.
Добавлено: 10 Сентябрь 2008, 21:36
Игорь Столяров
Здесь же речь идет не об одновременном открытии,а о последовательной проверке статуса файлов.
Т.е. определяется список необходимых файлов, например в очереди, и потом последовательно для
каждой записи устанавливается ее статус ... Впрочем - Вам видней, исходя из функционала ...
Re: Определение в CLARION открытия "не родных" файлов на сети.
Добавлено: 11 Сентябрь 2008, 11:21
Aнтон87
Добрый день!
Спасибо, попробую. Думаю получится, все файлы посредством очереди, открыть в монопольном режиме.

Re: Определение в CLARION открытия "не родных" файлов на сети.
Добавлено: 19 Сентябрь 2008, 19:29
Aнтон87
Всем добрый вечер!
Столкнулся с тем, что какой-то *.doc (например sample.doc) файл, находящийся в сети, открыли в Open(ом) в монопольном режиме при объявлении его DOS-файлом в *.dct, и выключили рабочую станцию на холодным рестартом. И после перезагрузки, в сети файл вышеупомянутый sample.doc все еще был занят в монопольном режиме.
Это не совсем удобно.
Re: Определение в CLARION открытия "не родных" файлов на сети.
Добавлено: 22 Сентябрь 2008, 9:17
WadimZapara
Можно попробовать функцию 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 открытия "не родных" файлов на сети.
Добавлено: 22 Сентябрь 2008, 12:59
Aнтон87
Добрый день!
Вадим, спасибо за совет. Я попробую Ваш вариант.
Re: Определение в CLARION открытия "не родных" файлов на сети.
Добавлено: 22 Сентябрь 2008, 14:11
WadimZapara
Прошу прощения, Антон, ошибочка малая вышла.
Открывать в монополе надо вызовом:
Код: Выделить всё
hFile = CreateFile(FileName, GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL)
Re: Определение в CLARION открытия "не родных" файлов на сети.
Добавлено: 23 Сентябрь 2008, 15:06
Aнтон87
Добрый день, Вадим!
Спасибо, учту.
Re: Определение в CLARION открытия "не родных" файлов на сети.
Добавлено: 23 Сентябрь 2008, 16:54
WadimZapara
Привет. Надо ли говорить, Антон, что закрытие открытого таким образом файла выглядит так:
Код: Выделить всё
BOOL EQUATE(SIGNED)
MAP
MODULE('Windows.DLL')
CloseHandle(UnSigned), BOOL, pascal,Dll(TRUE), Proc
END
END
CODE
CloseHandle(hFile) ! где hFile из предыдущего примера
Re: Определение в CLARION открытия "не родных" файлов на сети.
Добавлено: 23 Сентябрь 2008, 17:58
Aнтон87
Привет.
Я понимаю, что CloseHandle(hFile) может закрыть файл, открытый в монопольном режиме.
Re: Определение в CLARION открытия "не родных" файлов на сети.
Добавлено: 23 Сентябрь 2008, 18:05
Aнтон87
Спасибо!

Re: Определение в CLARION открытия "не родных" файлов на сети.
Добавлено: 24 Сентябрь 2008, 10:00
WadimZapara
всё хорошо ? проблема решена ?
если так, - я рад, что смог помочь