Форум: "Сети";
Текущий архив: 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.48 MB
Время: 0.016 c