Узнать,что файл открыт другим пользователем

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
SergT
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 237
Зарегистрирован: 22.06.2005 (Ср) 21:50
Откуда: Москва

Узнать,что файл открыт другим пользователем

Сообщение SergT » 28.12.2005 (Ср) 17:48

Как грамотно узнать что файл (в частности Excel) в данный момент открыт другим пользователем локальной сети?
Файл может изменяться через каждые 5 минут или чаще. Пробовал открывать файл и ловить ошибку доступа. НО в это время при доступе с других компьютеров тоже может возникнуть ошибка! В общем, некрасиво получается. Нельзя ли как нибудь иначе узнать, без попытки открытия файл? (На форуме искал - не нашел. Может слова не те подбирал)
Л. Толстой, «зачем обдумывать обдуманное, бери готовое и иди дальше, в этом сила человечества»
"Всё в наших руках, поэтому их нельзя опускать" (Коко Шанель)

SergT
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 237
Зарегистрирован: 22.06.2005 (Ср) 21:50
Откуда: Москва

Сообщение SergT » 29.12.2005 (Чт) 11:06

При открытии *.mdb файлов - создается (в той же папке) файлик *.ldb, в котором описаны все подключенные пользователи. Можно и в Excel'ном файле написать подобную процедурку. Но вот очень хочется без макросов. Может посмотреть какие -нить атрибуты или еще что-то? Я уверен, что решение должно быть иное, чем открытие файла. А может смена атрибутов или удаление...
Жду от Вас любых идей.
Л. Толстой, «зачем обдумывать обдуманное, бери готовое и иди дальше, в этом сила человечества»
"Всё в наших руках, поэтому их нельзя опускать" (Коко Шанель)

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 29.12.2005 (Чт) 11:10

А не проще уйти от Excel-я как такового? Все-же он не предназначен для многопользовательской работы по определению.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 29.12.2005 (Чт) 11:11

Excel-файл находится на сетевом ресурсе? Или локально?
Lasciate ogni speranza, voi ch'entrate.

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 29.12.2005 (Чт) 12:07

2 Andrey Fedorov

см. атачмент
Вложения
excel.zip
(10 Кб) Скачиваний: 24

X-BOND
Реалист
Реалист
 
Сообщения: 944
Зарегистрирован: 19.08.2002 (Пн) 11:44
Откуда: Ukraine

Сообщение X-BOND » 29.12.2005 (Чт) 13:04

Это подойдет?
(для любых файлов, сетевых или локальных)

Код: Выделить всё
Declare Function lOpen Lib "kernel32" Alias "_lopen" (ByVal lpPathName As String, ByVal iReadWrite As Long) As Long
Declare Function lClose Lib "kernel32" Alias "_lclose" (ByVal hFile As Long) As Long


Public Function IsFileAlreadyOpen(ByVal FileName As String) As Boolean
Dim hFile As Long
Dim lastErr As Long
   
hFile = -1
lastErr = 0
hFile = lOpen(FileName, &H10)

If hFile = -1 Then
    lastErr = Err.LastDllError
Else
lClose (hFile)
End If

IsFileAlreadyOpen = (hFile = -1) And (lastErr = 32)

End Function

SergT
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 237
Зарегистрирован: 22.06.2005 (Ср) 21:50
Откуда: Москва

Сообщение SergT » 29.12.2005 (Чт) 18:11

alibek писал(а):Excel-файл находится на сетевом ресурсе? Или локально?

На сетевом. С рекомендацией открывать для чтения...
Л. Толстой, «зачем обдумывать обдуманное, бери готовое и иди дальше, в этом сила человечества»
"Всё в наших руках, поэтому их нельзя опускать" (Коко Шанель)

SergT
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 237
Зарегистрирован: 22.06.2005 (Ср) 21:50
Откуда: Москва

Сообщение SergT » 29.12.2005 (Чт) 18:22

Спасибо "X-BOND" - то,что надо! На 2000 работает изумительно :D
Л. Толстой, «зачем обдумывать обдуманное, бери готовое и иди дальше, в этом сила человечества»
"Всё в наших руках, поэтому их нельзя опускать" (Коко Шанель)

SergT
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 237
Зарегистрирован: 22.06.2005 (Ср) 21:50
Откуда: Москва

Сообщение SergT » 30.12.2005 (Пт) 22:38

Andrey Fedorov писал(а):А не проще уйти от Excel-я как такового? Все-же он не предназначен для многопользовательской работы по определению.


Низ-з-з-я! Начальство запрещает!
Л. Толстой, «зачем обдумывать обдуманное, бери готовое и иди дальше, в этом сила человечества»
"Всё в наших руках, поэтому их нельзя опускать" (Коко Шанель)


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 152

    TopList