FreeBasic
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.

После применения функции DIR остаётся занятым сетевой ресурс

Участников: 2

Перейти вниз

После применения функции DIR остаётся занятым сетевой ресурс Empty После применения функции DIR остаётся занятым сетевой ресурс

Сообщение  SimoninAlexey Пн Май 14, 2012 2:52 pm

Есть кусок программы, который проверяет наличие (отсутствие) файла на сетевом ресурсе:
...
Shell ("net use \\server\shared /user:%username% 123456 > nul") 'Подключаем сетевой ресурс

NameFile = Dir("\\server\shared\*",fbNormal) 'Проверка наличия файлов

If Len(NameFile) > 0 Then 'Если есть хоть какой-нибудь файл
... Далее операции с файлом
Do
...
NameFile = Dir("\\server\shared\*",fbNormal) 'Следующий файл
Loop While (Len(NameFile) > 0) And (Inkey <> Chr(27)) 'Крутим цикл пока не кончатся файлы или не нажмём Escape
Else
... Если файлов нет
... Прочие деяния
End If

Shell ("net use \\server\shared /d /y > nul") 'Отключаем сетевой ресурс
...

На последней строке программы отключения сетевого ресурса иногда Windows XP спотыкается, выводя сообщение:
"Осуществляется доступ к устройству в активном процессе". Я так думаю, что функция DIR ещё держит это подключение.
Каким образом сделать так, чтобы FreeBasic прекратил доступ в устройству, после чего можно спокойно его отключить? Подскажите команду или функцию. Может как-то можно сбросить функцию DIR?
Заранее спасибо.

SimoninAlexey

Сообщения : 7
Дата регистрации : 2012-05-14

Вернуться к началу Перейти вниз

После применения функции DIR остаётся занятым сетевой ресурс Empty Re: После применения функции DIR остаётся занятым сетевой ресурс

Сообщение  trew Пн Май 14, 2012 7:48 pm

Привет!

Алексей, ты неправильно используешь функцию DIR. В цикле Do-Loop не надо указывать путь и маску, достаточно

NameFile = DIR()

А так у тебя получается бесконечный цикл. Подробнее об функции DIR ЗДЕСЬ

trew

Сообщения : 331
Дата регистрации : 2010-10-14

Вернуться к началу Перейти вниз

После применения функции DIR остаётся занятым сетевой ресурс Empty Re: После применения функции DIR остаётся занятым сетевой ресурс

Сообщение  SimoninAlexey Ср Май 16, 2012 2:21 pm

Спасибо. Теперь так буду делать.

Ещё вопрос. Функция Dir() не видит каталоги, названные кириллицей. Можно это как-то обойти не используя библиотеку windows9.bi

SimoninAlexey

Сообщения : 7
Дата регистрации : 2012-05-14

Вернуться к началу Перейти вниз

После применения функции DIR остаётся занятым сетевой ресурс Empty Re: После применения функции DIR остаётся занятым сетевой ресурс

Сообщение  trew Ср Май 16, 2012 2:51 pm

SimoninAlexey пишет:Спасибо. Теперь так буду делать.

Ещё вопрос. Функция Dir() не видит каталоги, названные кириллицей. Можно это как-то обойти не используя библиотеку windows9.bi

Неправда, функция DIR нормально работает с кирилицей

trew

Сообщения : 331
Дата регистрации : 2010-10-14

Вернуться к началу Перейти вниз

После применения функции DIR остаётся занятым сетевой ресурс Empty Re: После применения функции DIR остаётся занятым сетевой ресурс

Сообщение  SimoninAlexey Чт Май 17, 2012 3:58 pm

Да. Всё верно. Нашёл ошибку.
Дело в том, что при применении функции в таком виде: Dir(Path+"\*",fbDirectory), не попадают каталоги с атрибутами "Архивный" и "Только для чтения". Пробовал Dir(Path+"\*",fbDirectory or fbNormal) - попадает всё (и файлы, и папки).
А мне нужно, чтобы фильтровались только папки со всеми атрибутами (Без атрибутов, Архивная, Только для чтения, Скрытая, Системная). Руководство читал, но ничего не нашёл или не понял.
Спасибо.

SimoninAlexey

Сообщения : 7
Дата регистрации : 2012-05-14

Вернуться к началу Перейти вниз

После применения функции DIR остаётся занятым сетевой ресурс Empty Re: После применения функции DIR остаётся занятым сетевой ресурс

Сообщение  trew Чт Май 17, 2012 5:54 pm

SimoninAlexey пишет:Да. Всё верно. Нашёл ошибку.
Дело в том, что при применении функции в таком виде: Dir(Path+"\*",fbDirectory), не попадают каталоги с атрибутами "Архивный" и "Только для чтения". Пробовал Dir(Path+"\*",fbDirectory or fbNormal) - попадает всё (и файлы, и папки).
А мне нужно, чтобы фильтровались только папки со всеми атрибутами (Без атрибутов, Архивная, Только для чтения, Скрытая, Системная). Руководство читал, но ничего не нашёл или не понял.
Спасибо.

Я же давал выше ссылку для понимания работы с функцией DIR . Для кого я там это писал:


1 - только для чтения
2 - скрытый
4 - системный
16 - директория(папка)
32 - архивный
33 - нормальный (по умолчанию)

Как вы думаете , что вернет этот код?

Код:
Dim d As String = Dir("C:\*",16 Or 2 or 1)
Do
  ? d
  d= Dir() 
Loop Until d=""
Sleep

trew

Сообщения : 331
Дата регистрации : 2010-10-14

Вернуться к началу Перейти вниз

После применения функции DIR остаётся занятым сетевой ресурс Empty Re: После применения функции DIR остаётся занятым сетевой ресурс

Сообщение  SimoninAlexey Чт Май 17, 2012 6:05 pm

Возвращает папки с атрибутами Только для чтения, Скрытая и просто без атрибутов.
А как быть с системными и с атрибутом "Архивный"? Если добавить 32, то попадают и файлы, которые мне не нужны.
Спасибо.

Ничего пока внятнее придумать не смог. Может это быдлокодерство, поправьте:

#include "dir.bi"

Const PathZarp = "C:"
Dim NameDir As String
Dim At As Integer 'Атрибут текущего файла (папки)

NameDir = Dir(PathZarp+"\*",55,@At)

Do
'Атрибуты функции Dir(): 1 - Только на чтение
' 2 - Скрытый
' 4 - Системый
' 16 - Директория
' 32 - Архивный
' 33 - Файлы (Архивный и Только на чтение)
'
'16 - Директория
'17 (16+1) - Директория только на чтение
'18 (16+2) - Директория скрытая
'19 (16+1+2) - Директория только на чтение, скрытая
'21 (16+1+4) - Директория только на чтение, системная
'20 (16+4) - Директория системная
'22 (16+2+4) - Директория скрытая, системная
'23 (16+1+2+4) - Директория только на чтение и системная
'48 (16+32) - Директория с атрибутом архивный
'49 (16+1+32) - Директория только на чтение, архивная
'50 (16+2+32) - Директория скрытая, архивная
'51 (16+1+2+32) - Директория только на чтение, скрытая, архивная
'52 (16+4+32) - Директория скрытая, архивная
'53 (16+1+4+32) - Директория только на чтение, системная, архивная
'54 (16+2+4+32) - Директория скрытая, системная, архивная
'55 (16+1+2+4+32) - Директория только на чтение, скрытая, системная, архивная
'Следовательно, атрибут директории между 16 и 23 включительно и выше 48 включительно

If (At > 15 And At < 24) or At > 47 Then
Print NameDir
End If
NameDir = Dir(@At)
Loop Until NameDir = ""

SimoninAlexey

Сообщения : 7
Дата регистрации : 2012-05-14

Вернуться к началу Перейти вниз

После применения функции DIR остаётся занятым сетевой ресурс Empty Re: После применения функции DIR остаётся занятым сетевой ресурс

Сообщение  trew Чт Май 17, 2012 6:10 pm

SimoninAlexey пишет:Возвращает папки с атрибутами Только для чтения, Скрытая и просто без атрибутов.
А как быть с системными и с атрибутом "Архивный"? Если добавить 32, то попадают и файлы, которые мне не нужны.
Спасибо.

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

trew

Сообщения : 331
Дата регистрации : 2010-10-14

Вернуться к началу Перейти вниз

После применения функции DIR остаётся занятым сетевой ресурс Empty Re: После применения функции DIR остаётся занятым сетевой ресурс

Сообщение  SimoninAlexey Чт Май 17, 2012 6:16 pm

Проверял. С атрибутом "Архивный" точно не высвечиваются. Поэтому у меня и вкралась мысль, что не видит папки, обозванные кириллицей. Потом посмотрел, а на этой папке стоит атрибут "Архивный". Снимаю - видит, ставлю - нет.

SimoninAlexey

Сообщения : 7
Дата регистрации : 2012-05-14

Вернуться к началу Перейти вниз

После применения функции DIR остаётся занятым сетевой ресурс Empty Re: После применения функции DIR остаётся занятым сетевой ресурс

Сообщение  trew Чт Май 17, 2012 6:27 pm

SimoninAlexey пишет:Проверял. С атрибутом "Архивный" точно не высвечиваются. Поэтому у меня и вкралась мысль, что не видит папки, обозванные кириллицей. Потом посмотрел, а на этой папке стоит атрибут "Архивный". Снимаю - видит, ставлю - нет.

Да действительно вы правы, я дико извиняюсь.

Ничего пока внятнее придумать не смог. Может это быдлокодерство, поправьте:

А что поправлять то, вышли из ситуации, при чем тут быдлокодерство. У меня если честно, на компе папки с атрибутом архивный не встречаются, пришлось для примера специально галку в свойствах ставить. Но в любом случае, хорошо, что ответ уже найден. Всего доброго.

trew

Сообщения : 331
Дата регистрации : 2010-10-14

Вернуться к началу Перейти вниз

После применения функции DIR остаётся занятым сетевой ресурс Empty Re: После применения функции DIR остаётся занятым сетевой ресурс

Сообщение  SimoninAlexey Чт Май 17, 2012 6:32 pm

Я думал, что все шишки уже были ранее набиты, и проблема давно решена.
Так я, получается, первооткрыватель что ли?

SimoninAlexey

Сообщения : 7
Дата регистрации : 2012-05-14

Вернуться к началу Перейти вниз

После применения функции DIR остаётся занятым сетевой ресурс Empty Re: После применения функции DIR остаётся занятым сетевой ресурс

Сообщение  trew Чт Май 17, 2012 6:40 pm

SimoninAlexey пишет:Я думал, что все шишки уже были ранее набиты, и проблема давно решена.
Так я, получается, первооткрыватель что ли?

Не думаю. Это говорит только о том, что вы поняли лучше чем я этот вопрос.

trew

Сообщения : 331
Дата регистрации : 2010-10-14

Вернуться к началу Перейти вниз

После применения функции DIR остаётся занятым сетевой ресурс Empty Re: После применения функции DIR остаётся занятым сетевой ресурс

Сообщение  SimoninAlexey Чт Май 17, 2012 6:42 pm

Спасибо. Тема закрыта.

SimoninAlexey

Сообщения : 7
Дата регистрации : 2012-05-14

Вернуться к началу Перейти вниз

Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения