powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / File Open.. покрасивше.
21 сообщений из 21, страница 1 из 1
File Open.. покрасивше.
    #32451884
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!
что то я торможу с утра. Все забываю.
Такое дело. Как бы покрасивше проверить открыт ли файл?
Конкретнее, копаю в сторону Security attributes, file share attributes.
Пока ничего не накопал. Была где то апишка, один вызов и кирдык. Никак не могу вспомнить. и бумажек не осталось.

Может кто напомнит маразматику?

Спасибо.

ЗЫ Ошибку на открытие не надо...

Magnus
...
Рейтинг: 0 / 0
File Open.. покрасивше.
    #32452001
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кое что нашел.
NetFileGetInfo
заполняет передаваемый пустой буфер. Он будет содержать указатель на структуру FILE_INFO_2(или 3). Один из папраметров которой - количество локов на ресурсе.
Новот незадача. Вызывать ее могут только члены админов или операторов.
А если в пользовательской проге? Конечно же не подходит.

Что нить подскажете уважаемые? :)

Magnus
...
Рейтинг: 0 / 0
File Open.. покрасивше.
    #32452445
KostyaSPB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в библиотеке FIleSystemObject ничего нету? Я просто не помню, а времени покопаться пока нет!
...
Рейтинг: 0 / 0
File Open.. покрасивше.
    #32452959
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
См. h**p://borland.xportal.ru/forum/viewtopic.php?p=8574&highlight=&sid=86d5f6ddf63612368895115fcc9d94d5

Суть в том, что конструкции типа
Код: plaintext
if lOpen(FileName, &H10)= - 1 
, будут работать только если файл открыт c флагом OF_SHARE_EXCLUSIVE = &H10, чем большинство большинство программ пользуется редко. А перечисление всех открытых handle-ов в системе - это разврат.
...
Рейтинг: 0 / 0
File Open.. покрасивше.
    #32453180
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чем стандартный Open + обработка ошибок не подходит
Код: plaintext
1.
2.
3.
4.
Syntax

Open pathname For mode [Access access] [lock] As [#]filenumber [Len=reclength]

If the file is already opened by another process and the specified type of access is not allowed, the Open operation fails and an error occurs.
...
Рейтинг: 0 / 0
File Open.. покрасивше.
    #32453476
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Senin Viktor
Гм.. Именно так сейчас и делаю :). Но помню что раньше делал по-другому.
Апишка какая то была.

2 KostyaSPB
Неа.



Magnus
...
Рейтинг: 0 / 0
File Open.. покрасивше.
    #32454530
Лавина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Метод FileExists
fso.FileExists(FileSpec)
Служит для проверки существования файла с заданным именем. Возвращает значение True в том случае, когда указанный файл существует; в противном случае возвращается значение False

Дальше сам разберешься, удачи.
...
Рейтинг: 0 / 0
File Open.. покрасивше.
    #32455266
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гм. :)
Вопрос то почитай :)
Дело не в отсутствии файла а в ошибке доступа еслион уже открыт.

А фсо почти никогда не испоьзую, в большинстве случае есть более изящные способы.


Magnus
...
Рейтинг: 0 / 0
File Open.. покрасивше.
    #32704124
Пашка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТАкая же у меня проблема.
Из вышеприведеннго все вроде понял.
Подскажите, гуру, как ошибки то правильно обработать после open file?
Чтобы если файл открыт - писать в него ,если не открыт - создать заново, типа такого...
...
Рейтинг: 0 / 0
File Open.. покрасивше.
    #32704203
raur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПашкаТАкая же у меня проблема.
Из вышеприведеннго все вроде понял.
Подскажите, гуру, как ошибки то правильно обработать после open file?
Чтобы если файл открыт - писать в него ,если не открыт - создать заново, типа такого...
for append если не ошибаюсь
...
Рейтинг: 0 / 0
File Open.. покрасивше.
    #32705123
Дурак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛавинаМетод FileExists
fso.FileExists(FileSpec)
Служит для проверки существования файла с заданным именем. Возвращает значение True в том случае, когда указанный файл существует; в противном случае возвращается значение False

Дальше сам разберешься, удачи

Ну, Лавина, умыла Магнуса :-)))))


И почему гуру так любят АПИ?
...
Рейтинг: 0 / 0
File Open.. покрасивше.
    #32705235
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Дурак
Можно и так сказать, если не принимать во внимание тот факт что ее ответ не имел ничего общего с моим вопросом .


Magnus
...
Рейтинг: 0 / 0
File Open.. покрасивше.
    #32735993
raur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрос хоть и старый но актуален
как через АПИ проверить открыт ли файл? (fso не интересно )
...
Рейтинг: 0 / 0
File Open.. покрасивше.
    #32736030
raur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
marvanСм. h**p://borland.xportal.ru/forum/viewtopic.php?p=8574&highlight=&sid=86d5f6ddf63612368895115fcc9d94d5

Суть в том, что конструкции типа
Код: plaintext
if lOpen(FileName, &H10)= - 1 
, будут работать только если файл открыт c флагом OF_SHARE_EXCLUSIVE = &H10, чем большинство большинство программ пользуется редко. А перечисление всех открытых handle-ов в системе - это разврат.

расскажи плиз побольше о флагах
...
Рейтинг: 0 / 0
File Open.. покрасивше.
    #32736045
raur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
raur marvanСм. h**p://borland.xportal.ru/forum/viewtopic.php?p=8574&highlight=&sid=86d5f6ddf63612368895115fcc9d94d5

Суть в том, что конструкции типа
Код: plaintext
if lOpen(FileName, &H10)= - 1 
, будут работать только если файл открыт c флагом OF_SHARE_EXCLUSIVE = &H10, чем большинство большинство программ пользуется редко. А перечисление всех открытых handle-ов в системе - это разврат.

расскажи плиз побольше о флагах
разобрался
а как узнать с каким флагом та или иная прога открывает файл (ворд например)?
спасибо
...
Рейтинг: 0 / 0
File Open.. покрасивше.
    #32736600
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот статейка , но для NT, это не подходит.
...
Рейтинг: 0 / 0
File Open.. покрасивше.
    #32736931
raur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я выяснил методом научно тыка:

Private Declare Function lOpen Lib "kernel32" Alias "_lopen" (ByVal lpPathName As String, ByVal iReadWrite As Long) As Long
Private Declare Function lClose Lib "kernel32" Alias "_lclose" (ByVal hFile As Long) As Long

Private Const OF_CANCEL = &H800
Private Const OF_CREATE = &H1000
Private Const OF_DELETE = &H200
Private Const OF_EXIST = &H4000
Private Const OF_PARSE = &H100
Private Const OF_PROMPT = &H2000
Private Const OF_READ = &H0
Private Const OF_READWRITE = &H2
Private Const OF_REOPEN = &H8000
Private Const OF_SHARE_COMPAT = &H0
Private Const OF_SHARE_DENY_NONE = &H40
Private Const OF_SHARE_DENY_READ = &H30
Private Const OF_SHARE_DENY_WRITE = &H20
Private Const OF_SHARE_EXCLUSIVE = &H10
Private Const OF_VERIFY = &H400
Private Const OF_WRITE = &H1
...
Рейтинг: 0 / 0
File Open.. покрасивше.
    #32736955
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
raurя выяснил методом научно тыка
Молодец, но для выяснения, используется ли файл каким либо процессом - это не поможет. Странно только почему научный тык не привёл тебя к функциям CreateFile или OpenFile.
...
Рейтинг: 0 / 0
File Open.. покрасивше.
    #32738649
raur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поможет
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Private\xa0Function\xa0IsFileAlreadyOpen(ByVal\xa0FileName\xa0As\xa0String,\xa0ByVal\xa0constata\xa0As\xa0Long)\xa0As\xa0Boolean
\xa0\xa0\xa0\xa0Dim\xa0hFile\xa0As\xa0Long
\xa0\xa0\xa0\xa0Dim\xa0lastErr\xa0As\xa0Long
\xa0\xa0\xa0\xa0\' Initialize file handle and error variable.
\xa0\xa0\xa0\xa0hFile\xa0=\xa0-1
\xa0\xa0\xa0\xa0lastErr\xa0=\xa00
\xa0\xa0\xa0\xa0\' Open for for read and exclusive sharing.
\xa0\xa0\xa0\xa0hFile\xa0=\xa0lOpen(FileName,\xa0constata)
\xa0\xa0\xa0\xa0\' If we couldn\'t open the file, get the last error.
\xa0\xa0\xa0\xa0If\xa0hFile\xa0=\xa0-1\xa0Then
\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0lastErr\xa0=\xa0Err.LastDllError
\xa0\xa0\xa0\xa0Else
\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\' Make sure we close the file on success.
\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0lClose\xa0(hFile)
\xa0\xa0\xa0\xa0End\xa0If
\xa0\xa0\xa0\xa0\' Check for sharing violation error.
\xa0\xa0\xa0\xa0IsFileAlreadyOpen\xa0=\xa0(hFile\xa0=\xa0-1)\xa0And\xa0(lastErr\xa0=\xa032)
End\xa0Function


Как отформатирован этот код?
...
Рейтинг: 0 / 0
File Open.. покрасивше.
    #32739211
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
от чего ушли, к тому и пришли
Код: plaintext
1.
Private Sub Command1_Click()    MsgBox (isFileOpen("C:\\db.mdb"))End Sub\'возвращает True если файл открытPrivate Function isFileOpen(sFileName As String) As Boolean    Dim lNum As Long    lNum = FreeFile    On Error GoTo BkmErr    Open sFileName For Input Access Read Lock Read As #lNum    Close lNum    isFileOpen = False    Exit FunctionBkmErr:    isFileOpen = TrueEnd Function
Как отформатирован этот код?
...
Рейтинг: 0 / 0
File Open.. покрасивше.
    #32739281
VBaser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
маленький комментарий: этим способом (и АПИ на котором бейсиковский Open... построен) можно пользоваться, когда время проверки не критично. Функции Marvan требуется несколько миллисекунд, иногда от 0.5сек до целой секунды (если в NT через share или что-то подобно заумное).

Для меня это было слишком заметно, но другого способа я не нашел. Если не пользовать "физический" лок (через file system, как в Open...Lock Read/Write ) - вполне допустимое решение это писать лок прямо в файл или в общую базу данных (если к файлу имеют доступ только мои апликации). Например, в файл config построенный на XML я просто писал идентификатор в атрибут корневого элемента.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / File Open.. покрасивше.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]