Определение в CLARION открытия "не родных" файлов на сети.

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Aнтон87
Посетитель
Сообщения: 33
Зарегистрирован: 07 Август 2008, 18:43

Определение в CLARION открытия "не родных" файлов на сети.

Сообщение Aнтон87 »

Занимаюсь модулем документооборота, поэтому из Clarion на рабочих станциях постоянно корректируется и открывается множество “не родных” файлов (*.doc, *.html, *.xls, *.txt) на сети. Каким образом, ( либо WinApi или другим способом), можно определить в Clarion, работая на определенной станции, что данные вышеперечисленные файлы уже открыты с других рабочих станций сетки.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8033
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Re: Определение в CLARION открытия "не родных" файлов на сети.

Сообщение Игорь Столяров »

Добрый день !
Объяви DOS файл, присвой ему полное имя проверяемого документа и сделай попытку
открытия в монопольном режиме (OPEN). Если файл уже открыт - получишь ошибку.
Если файл свободен - просто закрой его. Все ...
Make Clarion Great Again ! 😎
Aнтон87
Посетитель
Сообщения: 33
Зарегистрирован: 07 Август 2008, 18:43

Re: Определение в CLARION открытия "не родных" файлов на сети.

Сообщение Aнтон87 »

Добрый день, Игорь.
Просто ОPEN(oм) не совсем удобно, их много файлов, и для каждого надо объявлять DOS-file. Может быть ситуация, что некоторое подмножество "не родных файлов" надо открыть одновременно.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8033
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Re: Определение в CLARION открытия "не родных" файлов на сети.

Сообщение Игорь Столяров »

Здесь же речь идет не об одновременном открытии,а о последовательной проверке статуса файлов.
Т.е. определяется список необходимых файлов, например в очереди, и потом последовательно для
каждой записи устанавливается ее статус ... Впрочем - Вам видней, исходя из функционала ...
Make Clarion Great Again ! 😎
Aнтон87
Посетитель
Сообщения: 33
Зарегистрирован: 07 Август 2008, 18:43

Re: Определение в CLARION открытия "не родных" файлов на сети.

Сообщение Aнтон87 »

Добрый день!
Спасибо, попробую. Думаю получится, все файлы посредством очереди, открыть в монопольном режиме. :|
Aнтон87
Посетитель
Сообщения: 33
Зарегистрирован: 07 Август 2008, 18:43

Re: Определение в CLARION открытия "не родных" файлов на сети.

Сообщение Aнтон87 »

Всем добрый вечер!

Столкнулся с тем, что какой-то *.doc (например sample.doc) файл, находящийся в сети, открыли в Open(ом) в монопольном режиме при объявлении его DOS-файлом в *.dct, и выключили рабочую станцию на холодным рестартом. И после перезагрузки, в сети файл вышеупомянутый sample.doc все еще был занят в монопольном режиме.
Это не совсем удобно.
Аватара пользователя
WadimZapara
Активист
Сообщения: 181
Зарегистрирован: 11 Июнь 2008, 12:11
Откуда: Тамбов

Re: Определение в CLARION открытия "не родных" файлов на сети.

Сообщение 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)
Компьютер имеет то преимущество перед мозгом, что им пользуются...
Aнтон87
Посетитель
Сообщения: 33
Зарегистрирован: 07 Август 2008, 18:43

Re: Определение в CLARION открытия "не родных" файлов на сети.

Сообщение Aнтон87 »

Добрый день!

Вадим, спасибо за совет. Я попробую Ваш вариант.
Аватара пользователя
WadimZapara
Активист
Сообщения: 181
Зарегистрирован: 11 Июнь 2008, 12:11
Откуда: Тамбов

Re: Определение в CLARION открытия "не родных" файлов на сети.

Сообщение WadimZapara »

Прошу прощения, Антон, ошибочка малая вышла.
Открывать в монополе надо вызовом:

Код: Выделить всё

   hFile = CreateFile(FileName, GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL)
Компьютер имеет то преимущество перед мозгом, что им пользуются...
Aнтон87
Посетитель
Сообщения: 33
Зарегистрирован: 07 Август 2008, 18:43

Re: Определение в CLARION открытия "не родных" файлов на сети.

Сообщение Aнтон87 »

Добрый день, Вадим!

Спасибо, учту.
Аватара пользователя
WadimZapara
Активист
Сообщения: 181
Зарегистрирован: 11 Июнь 2008, 12:11
Откуда: Тамбов

Re: Определение в CLARION открытия "не родных" файлов на сети.

Сообщение WadimZapara »

Привет. Надо ли говорить, Антон, что закрытие открытого таким образом файла выглядит так:

Код: Выделить всё

BOOL  EQUATE(SIGNED)
  MAP
    MODULE('Windows.DLL')
      CloseHandle(UnSigned), BOOL, pascal,Dll(TRUE), Proc
    END
  END
      CODE
   CloseHandle(hFile)   ! где hFile из предыдущего примера
Компьютер имеет то преимущество перед мозгом, что им пользуются...
Aнтон87
Посетитель
Сообщения: 33
Зарегистрирован: 07 Август 2008, 18:43

Re: Определение в CLARION открытия "не родных" файлов на сети.

Сообщение Aнтон87 »

Привет.

Я понимаю, что CloseHandle(hFile) может закрыть файл, открытый в монопольном режиме.
Aнтон87
Посетитель
Сообщения: 33
Зарегистрирован: 07 Август 2008, 18:43

Re: Определение в CLARION открытия "не родных" файлов на сети.

Сообщение Aнтон87 »

Спасибо! :)
Аватара пользователя
WadimZapara
Активист
Сообщения: 181
Зарегистрирован: 11 Июнь 2008, 12:11
Откуда: Тамбов

Re: Определение в CLARION открытия "не родных" файлов на сети.

Сообщение WadimZapara »

всё хорошо ? проблема решена ?
если так, - я рад, что смог помочь
Компьютер имеет то преимущество перед мозгом, что им пользуются...
Ответить