Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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]

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



Страницы: 1 вся ветка

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

Наверх





Память: 0.49 MB
Время: 0.006 c
7-70051
Asker
2001-10-02 07:09
2002.04.22
Autorun


14-70031
Sergey_
2002-03-13 13:39
2002.04.22
печать под досом на hp-1100


3-69713
oss
2002-03-29 12:03
2002.04.22
ADO login в mssql как ?


1-69871
snoup
2002-04-08 20:45
2002.04.22
Как TPopup соединить с TToolBar?


3-69703
KonuhovSegey
2002-03-30 09:53
2002.04.22
Кто знает подробности о SQL Dialect в IB6





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский