Форум: "Сети";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];




Вниз

Проверить доступность сетевого диска 


Андрей Сенченко   (2002-01-25 14:25) [0]

Нужно проверить - доступен ли сетевой диск на чтение/запись/удаление с данного компьютера ( данного пользователя ) под Win98. Сервер под Novell 5.0
В данный момент это происходит простой попыткой создания - удаления пустого файла в блоке Try .. Exept.
Может имеются более изящные методы ?



Wonder   (2002-01-25 14:31) [1]

Ну теоретически можно проверить права пользователя. Novell Client позволяет смотреть для текущего пользователя права на все объекты. Остается найти описание API...



Anatoly Podgoretsky   (2002-01-27 17:31) [2]

Теоритически можно, но только это ничего не дает, требуется проверить не права, а доступность, файл можент быть открыт, например монопольно и окажется нежоступным, хотя права на чтение есть.



Wonder   (2002-01-28 11:10) [3]

>Anatoly Podgoretsky
А если вопрос внимательно перечитать?
Причем здесь файл какой-то?



Андрей Сенченко   (2002-01-28 13:03) [4]

> Wonder © (28.01.02 11:10)
Да нет ... Anatoly Podgoretsky © в основном прав. Нужны не права, прописанные "где-то" а именно возможность работы с файлами по сети в данный момент.
Вполне реальна ситуация, что права есть, да вот уборщица сразу после логина шваброй по хабу заехала ...



Wonder   (2002-01-28 17:02) [5]

Ну знаете ли! Какой вопрос - такой ответ.
Вряд ли разработчики ПО расчитывали на уборщиц с швабрами...



Андрей Сенченко   (2002-01-29 12:17) [6]

> Wonder © (28.01.02 17:02)
> Ну знаете ли! Какой вопрос - такой ответ.

Вопрос: " доступен ли сетевой диск ..." по-моему вполне однозначен. О правах пользователя здесь речи не шло.

> Вряд ли разработчики ПО расчитывали на уборщиц с швабрами...
И именно поэтому зачастую приходится отключать автосохранение в Word-e на документах размером больше... Это, батенька, у кого как.

Короче ... нету методов. Ладно будем иметь что имеем



Wonder   (2002-01-29 12:22) [7]

Рискуя попасть в "Потрепаться":
Разумеется, вопрос "доступен ли сетевой диск" однозначен.
А вот не вырванный из контекста вопрос "доступен ли сетевой диск на чтение/запись/удаление" иначе как с правами пользователя никаких ассоциаций, у меня по крайней мере, не вызывает.



rusher   (2002-01-29 13:49) [8]

Вообще то можно проверить доступность шары, после считать аттрубуты файла (я имею ввиду не "скрытый" или "архивный")



panov   (2002-01-29 14:40) [9]

А какие проблемы:

1. Создаем файл. //проверка на доступность.
1.1. Если ошибка в п.1 - пытаемся открыть существующий файл
2. Пишем в него. //проверка на запись
3. Читаем из него. //проверка на чтение
4. Удаляем файл. //проверка на удаление файлов


Если ошибка при выполнении п.1 и п.1.1. одновременно - "диск не доступен".
(Как я понимаю - нам не важно, почему?)

А остальные пункты обрабатываются по отдельности...



Anatoly Podgoretsky   (2002-02-02 20:08) [10]

Wonder © (28.01.02 11:10)
А при чем тут диск какой то, не диск же читается, удаляется, пишется, а именно файлы. То что в вопросе про диск, то оставим это на совести вопрошающего.

Андрей Сенченко © (29.01.02 12:17)
И как ты заметил, что я даже не про прпва, а про возможность выполнения операции чтения/записи, специально подчеркнуто



Андрей Сенченко   (2002-02-04 14:14) [11]

Кризис непонимания короче .....
вопрос на мой взгляд был не особо кривой, но видать действительно нужно расшифровать задачу.

1. Программа висит себе запущенной при старте Windows и по таймеру занимается архивацией и отсылкой по E_mail некоторого набора файлов.
Никаких видимых признаков своего существования кроме значка в трее не проявляет.
2. Упомянутый набор файлов строго говоря случаен ( может меняться в смысле своего расположения на сетевых и локальных дисках ).
Все имена и пути к ним пользователь определяет сам и они сохраняются в INI-шке.
3. С файлами на локальном диске все просто - нужно просто проверить, а не открыт ли этот фйал другим приложением в момент обращения, но доступны они всегда.
С сетью сложнее. Безусловно если сетевой диск по какой либо причине не доступен ( уборщица например шнурок из хаба выдернула веником ) на момент собственно выполнения задачи - то задача завершится с ошибкой, мы ее проанализируем и все поймем.
НО в этот момент уже поздняк метаться - есть определенные сроки отсылки почты, которые надо соблюдать.
4. Решение проблемы - с промежутком чаще, чем основной таймер задач проверяться - а сможем ли мы вообще найти эти самые файлы, да еще с ними работать.
5. Реализация в данный момент: по пути прописанному в INI-шке создаем темповый файлик, записываем в него строчку, читаем из него строчку, удаляем его. Если все прошло без ошибок - значит OK. Если нет - программа выдает сообщение об ошибке из серии "не доступна директория ... проверьтесь )

6. Вопрос был в следующем : есть ли способ реализовать п.5 не гоняя по сети кучу файловых операций

Всем спасибо за обсуждение, извините за погрешности в формулировки вопроса.



Amit   (2002-02-04 21:33) [12]

Вижу только критику, и поэтому привожу пример, того как узнать
доступность сетевого диска:
А вот сам и пример:

type
PNetResourceArray = ^TNetResourceArray;
TNetResourceArray = array[0..MaxInt div SizeOf(TNetResource) - 1] of TNetResource;

Procedure EnumResources(LpNR:PNetResource);
Var
NetHandle: THandle;
BufSize: Integer;
Size: Integer;
NetResources: PNetResourceArray;
Count: Integer;
NetResult:Integer;
I: Integer;
NewItem:TListItem;
Begin
If WNetOpenEnum(
RESOURCE_GLOBALNET,
RESOURCETYPE_ANY,
// RESOURCETYPE_ANY - все ресурсы
// RESOURCETYPE_DISK - диски
// RESOURCETYPE_PRINT - принтеры
0,
LpNR,
NetHandle) <> NO_ERROR
then Exit;
Try
BufSize := 50 * SizeOf(TNetResource);
GetMem(NetResources, BufSize);
Try
while True do
begin
Count := -1;
Size := BufSize;
NetResult := WNetEnumResource(NetHandle, Count, NetResources, Size);
If NetResult = ERROR_MORE_DATA then
begin
BufSize := Size;
ReallocMem(NetResources, BufSize);
Continue;
end;
if NetResult <> NO_ERROR then Exit;
For I := 0 to Count-1 do
Begin
With NetResources^[I] do
Begin
If RESOURCEUSAGE_CONTAINER =
(DwUsage and RESOURCEUSAGE_CONTAINER)
then
EnumResources(@NetResources^[I]);
If dwDisplayType = RESOURCEDISPLAYTYPE_SHARE Then
// ^^^^^^^^^^^^^^^^^^^^^^^^^ - ресурс
// RESOURCEDISPLAYTYPE_SERVER - компьютер
// RESOURCEDISPLAYTYPE_DOMAIN - рабочая группа
// RESOURCEDISPLAYTYPE_GENERIC - сеть
Begin
NewItem:= Form1.ListView1.Items.Add;
NewItem.Caption:=LpRemoteName;
End;
End;
End;
End;
finally
FreeMem(NetResources, BufSize);
end;
finally
WNetCloseEnum(NetHandle);
end;
End;

procedure TForm1.Button1Click(Sender: TObject);
Var
OldCursor: TCursor;
begin
OldCursor:= Screen.Cursor;
Screen.Cursor:= crHourGlass;
With ListView1.Items do
Begin
BeginUpdate;
Clear;
EnumResource(nil);
EndUpdate;
End;
Screen.Cursor:= OldCursor;
end;



Dmitry Konnov   (2002-02-08 21:52) [13]

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




Форум: "Сети";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.75 MB
Время: 0.023 c
14-70029          Merlin                2002-01-29 17:54  2002.04.22  
---|Ветка была без названия|---


7-70044           Delphimun             2002-01-27 15:54  2002.04.22  
Существует ли в Способ запустить пргу ещё до загрузки windows(в dos)


14-69968          B@Nt                  2002-03-11 11:45  2002.04.22  
Где мона слить книгу по Базам?


14-70021          KvORubin              2002-03-17 18:24  2002.04.22  
RichEdit - как в нём отобразить непечатаемые символы (как в M.Office)


3-69659           Twister               2002-04-03 07:36  2002.04.22  
Отчет в MS Word