Открыт ли файл?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
bam
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 04.02.2008 (Пн) 19:56

Открыт ли файл?

Сообщение bam » 20.05.2008 (Вт) 20:13

Подскажите как узнать открыт ли файл?

Есть файл "qqq.txt", лежит на "Комп3". Есть две проги "П1" и "П2" (написанные на VB), которые запущены на компах "Комп1" и "Комп2". Проги о существовании друг друга не знают. Как прогой "П1" определить открыт ли файл "qqq.txt" прогой "П2"?

Пробывал тупо найти ошибку о том, что нельзя файл открыть если он уже занят. Выглядит это так:
В проге "П2" писал:
Код: Выделить всё
Private F As Integer
Private Sub Form_Load()
   F = FreeFile
   Open "C:\tools.pmf" For Input As F
   Timer1.Interval = 30000
   Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
   Close F
End Sub


В проге "П1" и в течении 30 секунд запускал ее:
Код: Выделить всё
Private F As Integer
Private Sub Form_Load()
   F = FreeFile
   Open "C:\tools.pmf" For Input As F
End Sub


но, данные действия не привели ни к какой ошибке.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 20.05.2008 (Вт) 20:35

CreateFile с SHARE_NONE
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

bam
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 04.02.2008 (Пн) 19:56

Сообщение bam » 20.05.2008 (Вт) 20:42

ANDLL, кодом помоги, а то я не работал с CreateFile.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 21.05.2008 (Ср) 8:48

bam
VBA Help писал(а):Open pathname For mode [Access access] [lock] As [#]filenumber [Len=reclength]

VBA Help писал(а):lock Optional. Keyword specifying the operations restricted on the open file by other processes: Shared, Lock Read, Lock Write, and Lock Read Write.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 21.05.2008 (Ср) 14:32

http://twister.rootkits.ru/articles/han ... um.php#p_3

Это вариант локального перечисления хэндлов открытых файлов. Честно говоря, даже не знаю, будет ли присутствовать в полученном списке хэндл файла, открытого с другого компа. Но ты можешь это проверить - по идее должен.
А я все практикую лечение травами...

bam
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 04.02.2008 (Пн) 19:56

Сообщение bam » 21.05.2008 (Ср) 20:12

Денис, громадное спасибо, именно то что нужно.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 22.05.2008 (Чт) 8:32

bam
Пжалуйста.
Я может уже говорил, но повторюсь: Широко известно, что в vb6 нету офлайн-справки. Мой вариант решения - юзать hlp-файлы от vb5 или (если vb5 тоже нету под рукой) справку по VBA из Word например. Справка по office vba имеет неоспоримое преимущество - это контекстная справка, то есть мы тупо пишем Open в любом модуле и жмем F1. Появляется окошко с описанием. В hlp-файлах vb5 нужно уже юзать встроенный рубрикатор.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

bam
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 04.02.2008 (Пн) 19:56

Сообщение bam » 24.05.2008 (Сб) 10:04

В продолжение разбора доступа к файлу.
Столкнулся с такой проблемой:
Открываю файл и блокирую его на запись
Код: Выделить всё
Open Adres For Append Lock Write As F
затем пытаюсь его программно скопировать с помощью FileCopy, а VB его не копирует, хотя если просто (в проводнике) скопировать, то копирует. В чем моя ошибка?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 24.05.2008 (Сб) 10:20

что в vb6 нету офлайн-справки.

С чего бы это?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

bam
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 04.02.2008 (Пн) 19:56

Сообщение bam » 24.05.2008 (Сб) 10:27

Хакер, получается открытый файл средствали VB вообще нельзя скопировать?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 24.05.2008 (Сб) 10:28

bam
Не получается. Как ты на основании того, что фраза "в VB6 нет офлайн спраки" - ложь, сделал вывод, что нельзя скопировать файл?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

bam
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 04.02.2008 (Пн) 19:56

Сообщение bam » 24.05.2008 (Сб) 10:30

Хакер, :) залез в справку... и на FileCopy пишет,
Remarks
If you try to use the FileCopy statement on a currently open file, an error occurs.
Но ведь должен быть способ скопировать файл, если проводник его копирует...

bam
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 04.02.2008 (Пн) 19:56

Сообщение bam » 01.06.2008 (Вс) 16:36

Ну что, никто не знает что ли?? не верю... помогите, плиз...

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Сообщение Wolfie » 04.06.2008 (Ср) 3:56

Попробуй CopyFile из API
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _

ZOD
Обычный пользователь
Обычный пользователь
 
Сообщения: 75
Зарегистрирован: 24.03.2004 (Ср) 19:54
Откуда: Barnaul

Сообщение ZOD » 04.06.2008 (Ср) 18:52

Вот это должно помочь.
В модуль:
Код: Выделить всё
Public Const OPEN_EXISTING = 3
Public Const FILE_ATTRIBUTE_NORMAL = &H80&
Public Const GENERIC_READ = &H80000000

Public Declare Function CreateFile Lib "kernel32" _
            Alias "CreateFileA" _
            (ByVal lpFileName As String, _
            ByVal dwDesiredAccess As Long, _
            ByVal dwShareMode As Long, _
            ByVal lpSecurityAttributes As Long, _
            ByVal dwCreationDisposition As Long, _
            ByVal dwFlagsAndAttributes As Long, _
            ByVal hTemplateFile As Long) As Long
           
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long


Сама функция проверки: если занят - false, нет - true.
Код: Выделить всё

Public Function IsFreeFile(ByVal sLongFileName As String) As Boolean
     Dim hfile As Long
     IsFreeFile = False
     hfile = CreateFile(sLongFileName, GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
     
     If hfile <> -1 Then
         IsFreeFile = True
     End If
     CloseHandle hfile
End Function


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

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

Сейчас этот форум просматривают: AhrefsBot, SemrushBot и гости: 46

    TopList