13.07.2020, 14:08 [+3 UTC]
в нашей команде: 4 666 чел. | участники онлайн: 4 (рекорд: 21)

:: РЕГИСТРАЦИЯ

задать вопрос

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.89 (25.04.2020)
JS-v.1.45 | CSS-v.3.39

Общие новости:
13.04.2020, 00:02

Форум:
10.07.2020, 10:13

Последний вопрос:
13.07.2020, 11:50
Всего: 152734

Последний ответ:
13.07.2020, 13:29
Всего: 260327

Последняя рассылка:
12.07.2020, 14:15

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
14.04.2011, 13:55 »
Ольга Дмитриевна
Спасибо!!! [вопрос № 182825, ответ № 266662]
11.08.2019, 11:43 »
dar777
Это самое лучшее решение! [вопрос № 196078, ответ № 278484]

РАЗДЕЛ • Basic

Создание программ на языке Basic.

[администратор рассылки: Андреенков Владимир (Академик)]

Лучшие эксперты в этом разделе

solowey
Статус: Профессионал
Рейтинг: 141
Sergey V. Gornostaev
Статус: Специалист
Рейтинг: 2
Асмик Гаряка
Статус: Советник
Рейтинг: 1

Перейти к консультации №:
 

Консультация онлайн # 146167
Раздел: • Basic
Автор вопроса: Pithon
Отправлена: 06.10.2008, 11:07
Поступило ответов: 1

ситуация такая.
В расщаренной в сети папке лежит файл к примеру file.xls. Программно нужно определить занят ли этот файл каким либо процессом, без разнице с какого компьютера.
Спасибо

Состояние: Консультация закрыта

Ответ # 231441 от Megaloman (Мастер-Эксперт)

Здравствуйте, Pithon!
Макрос для Excel в приложении
Идея - пытаемся открыть файл. Если возникает ошибка с нужным номером (здесь 70) то файл занят.
Результат работы отображаю в клетке A1. Вы, естественно, построите программу, как Вам надо.
Если файл открывается без проблем, тут же его закрываем
В принципе, идею PsySex поминал, но (верьте мне, люди!) писал макрос, не прочтя пост в минифоруме. Жалко было написанное выбрасывать.
И, кроме того, у меня написано решение, а не идея.
Единственное, результат (т.к. это, в принципе, всего лишь иллюстрация решения) пишется в клетку A1 активного листа , так что будьте осторожны.

Приложение:


Консультировал: Megaloman (Мастер-Эксперт)
Дата отправки: 07.10.2008, 18:27

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 146167

PsySex
Профессионал

ID: 848

# 1

= общий = | 06.10.2008, 11:56 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Пробуйте переименовать его
Name "file.xls" As "newfile.xls"
если возникает ошибка, то файл занят. Если переименовался - верните потом ему прежнее имя.

неизвестный

# 2

= общий = | 06.10.2008, 13:57

да, неплохой способ smile я думал про него.
дело в том что работает медленно, с учетом того что файл далеко не один :)

неизвестный

# 3

= общий = | 06.10.2008, 13:59

я думал, может есть какая-нибудь API-функция

PsySex
Профессионал

ID: 848

# 4

= общий = | 06.10.2008, 14:30 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Ну можно использовать CreateFile т.е. если файл существует будет ошибка.
Каквариант еще ипользовать Open
http://www.bbs.vbstreets.ru.postman.ru/viewtopic.php?f=1&t=36644
ваш вопрос
http://www.sql.ru/forum/actualthread.aspx?tid=231867
ток чет особ решений не вижу:-)

PsySex
Профессионал

ID: 848

# 5

= общий = | 06.10.2008, 14:31 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Может еще чегонить найдете
Найти :-)

неизвестный

# 6

= общий = | 06.10.2008, 14:56

спасибо

Тесленко Евгений Алексеевич

# 7

= общий = | 06.10.2008, 22:04

Здравствуйте Pithon.
Мне кажется совет PsySex [06.10.2008, 13:56] оптимальный даже "...с учетом того что файл далеко не один..".

Function bFileFree(sNameFile As String) As Boolean
Const sTmp = "ssssssss"
Dim s As String
On Error Resume Next
    Err.Clear
    s = Mid(sNameFile, 1, Len(sNameFile) - Len(Dir(sNameFile)))
    s = s + sTmp
    Name sNameFile As s
    Name s As sNameFile
If Err.Number = 0 Then bFileFree = True
End Function

Евгений

Megaloman
Мастер-Эксперт

ID: 137394

# 8

= общий = | 07.10.2008, 18:36 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Тесленко Евгений Алексеевич,
Вы считаете, что дважды переименовать файл быстрее (и безопаснее), чем один раз попытаться его открыть? (и закрыть, в случае если файл свободен)?

=====
Нет времени на медленные танцы

Тесленко Евгений Алексеевич

# 9

= общий = | 07.10.2008, 18:50

Здравствуйте megaloman
"...с учетом того что файл далеко не один.." "...в сети..." быстрее - безусловно smile , безопаснее - ? smile (зависит от надежности сети)

=====
Нет времени на медленные танцы

Megaloman
Мастер-Эксперт

ID: 137394

# 10

= общий = | 07.10.2008, 21:32 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Добрый вечер, Тесленко Евгений Алексеевич!
А откуда такая уверенность? У меня на локальном диске получилось многократно быстрее открыть-закрыть. И по сети быстрее, но где-то, похоже, в методике у меня, возможно, баг, пока не осмыслил, утверждать не берусь с уверенностью.

=====
Нет времени на медленные танцы

Megaloman
Мастер-Эксперт

ID: 137394

# 11

= общий = | 08.10.2008, 12:19 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Здравствуйте, Тесленко Евгений Алексеевич !

Предлагаю Вашему вниманию тестовый макрос, запускаемый из-под Excel
Применяемая методика:
В папке имеется 3000 файлов, которые я тестирую на занятость сначала методом открыть-закрыть, затем дважды переименовать
Тест делаю как на локальном диске, так и на сетевом. Оцениваю время выполнения.


Результат:

Локальный диск Open-Close 30 000 тестов (10*3000) за 3"
Локальный диск Name-Name 30 000 тестов (10*3000) за 34"

Сетевой диск Open-Close 9 000 тестов (3*3000) за 16"
Сетевой диск Name-Name 9 000 тестов (3*3000) за 99"

Не знаю, насколько методика корректна, попробуйте предложить свою. Но по предложенным тестам способ Open-Close ощутимо быстрее.
Но, с другой стороны, возможно тест и не имеет большого смысла. Зачем-то эти файлы нужны, например, чтобы их копировать. А вот этот процесс займёт времени много больше, чем тест на занятость по любой методике. И, опять же, при попытке копировать открытый файл можно тоже выловить событие, что файл занят.

С неизменным уважением, megaloman.

Sub yyy()

n_Files = 2999  ' Число файлов
n_Iter = 3      ' Число повторений


' ************************************************ Open-Close
Svo = 0
Zan = 0

Range("C11") = Time()

m = 0
A = FreeFile()

For j = 1 To n_Iter
For i = 0 To n_Files

'NF = "F:\DeleteEto\Файл_" & i & "."                     '& "xls"    'Имя файла на локальном диске
 NF = "O:\DeleteEto\Файл_" & i & "."                     '& "xls"    'Имя файла на сетевом диске

On Error Resume Next
' Open NF For Random Lock Read As A
Open NF For Binary Lock Read As A

If Err <> 0 Then
'    Range("L1").Offset(m, 0) = NF & " Ошибка " & Err & ": " & Error(Err)
    m = m + 1
    Zan = Zan + 1
Else
    Close A
'    Range("L1").Offset(m, 0) = NF
    m = m + 1
    Svo = Svo + 1
End If
Next
Next

Range("C12") = Time()
Range("C13") = Str(Svo) + " " + Str(Zan)
    
' *************************************************** Name-Name
Svo = 0
Zan = 0

Range("C14") = Time()
'TF = "F:\DeleteEto\TMP."                          ' Имя файла в который переименовываем на локальном диске
 TF = "O:\DeleteEto\TMP."                          ' Имя файла в который переименовываем на сетевом диске

For j = 1 To n_Iter
For i = 0 To n_Files

'NF = "F:\DeleteEto\Файл_" & i & "."                     '& "xls"    'Имя файла на локальном диске
 NF = "O:\DeleteEto\Файл_" & i & "."                     '& "xls"    'Имя файла на сетевом диске

On Error Resume Next
Name NF As TF

If Err <> 0 Then
    Zan = Zan + 1
Else
   Name TF As NF
   Svo = Svo + 1
End If
Next
Next

Range("C15") = Time()
Range("C16") = Str(Svo) + " " + Str(Zan)

End Sub

=====
Нет времени на медленные танцы

 

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.14416 сек.

© 2001-2020, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.89 от 25.04.2020
Версия JS: 1.45 | Версия CSS: 3.39