Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

Microsoft WNet праблем   Найти похожие ветки 

 
alt7   (2004-03-15 11:20) [0]

Пишу в Делфях 6.

Задача состоит в том, чтоб по локальной сети подключиться к компьютеру и утянуть файлы с расшаренного диска. Беда в том что, один раз это работает (подключение, MoveFileEx, отключение), а на следующий раз вылетает ошибка: ERROR_SESSION_CREDENTIAL_CONFLICT.

Итак:
..
GetDriveType(PChar(NetDL[i]+":\")); // здесь определяем какая свободна буква на локальном компе
..
(1)
// Это у нас подключение
NetResource.dwType := RESOURCETYPE_DISK;
NetResource.lpLocalName  := PChar(NetDrive_Letter+":");
NetResource.lpRemoteName := PChar(_NetPath);
NetResource.lpProvider   := "";
DW_Res := WNetAddConnection2(NetResource,
                                PChar(_Password), {Password (if needed) or empty}
                                PChar(_Login), {User name (if needed) or empty}
                                CONNECT_UPDATE_PROFILE);
// Обработка различных ошибок
case DW_Res of
..
MoveFileEx
..
// Отключение
DW_Res := WNetCancelConnection2(PChar(NetDrive_Letter+":"),0,TRUE);
// Обработка различных ошибок
case DW_Res of

Один раз работает на ура, на второй раз в addconnection2 возникает ошибка ERROR_SESSION_CREDENTIAL_CONFLICT, то есть, как я думаю, Винда запомнила то мое подключение, и хотя я и делал CancelConnection (результат ее 0 - нет ошибки).

Пробовал перед (1) вставить перебор подключенных устройств и потом отключить, то что Винда запомнила:

   DW_Res :=  WNetOpenEnum(RESOURCE_REMEMBERED,
                           RESOURCETYPE_ANY,
                           0,
                           nil,
                           hEnum);

 repeat
   lpnrDrv  := PNETRESOURCE(GlobalAlloc(GPTR, cbBuffer));
   DW_Res := WNetEnumResource(hEnum, cEntries, lpnrDrv, cbBuffer);
   if (DW_Res = NO_ERROR) then
   begin
      for i := 0 to cEntries - 1 do
     begin
       if lpnrDrv^.lpLocalName <> nil then
          // Тут я хотел отключить сетевой диск по букве (типа Z:)
          DW_Res := WNetCancelConnection2(PChar(NetDrive_Letter+":"),0,TRUE);
          case DW_Res of
            // Обработка ошибок
            ..
            ERROR_NOT_CONNECTED: MessageDlg("Некоторый текст",mtError,[mbOK],0);
          end;
         s := s + lpnrDrv^.lpLocalName + #9 + lpnrDrv^.lpRemoteName;
       Inc(lpnrDrv);
     end;
   end
   else if DW_Res <> ERROR_NO_MORE_ITEMS then
   begin
     s := s + "Cannot complete network drive enumeration";
     GlobalFree(HGLOBAL(lpnrDrv));
     break;
   end;
   GlobalFree(HGLOBAL(lpnrDrv));
 until (DW_Res = ERROR_NO_MORE_ITEMS);
 WNetCloseEnum(hEnum);
 if s = "" then s := "No network connections.";

Вот. Но возникает ошибка с сообщением ERROR_NOT_CONNECTED. То есть мне говорят, что такого подключения нет, и отключать нечего.

Вопрос: как мне с этим справиться? Что тут у меня не так, или как иначе сделать мне, чтоб я мог нормально подключаться-переносить файлы-отключаться?

Thx заранее


 
Vlad Oshin ©   (2004-03-15 11:57) [1]

а просто написать путь \\сервер\диск\папка\файл ?


 
alt7   (2004-03-15 12:10) [2]

Пробовал я, не пускает... (расширивал каталоги на пользователя под которым лезу тудысь)...
Не помню, какая ошибка вылетает, но вылетает ;)
Да и причем здесь это?

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


 
Reindeer Moss Eater ©   (2004-03-15 12:15) [3]

NetResource.lpLocalName  := nil;
С файлом работать по UNC.


 
Verg ©   (2004-03-15 12:34) [4]


> DW_Res := WNetAddConnection2(NetResource,
>                                 PChar(_Password), {Password
> (if needed) or empty}
>                                 PChar(_Login), {User name
> (if needed) or empty}
>                                 CONNECT_UPDATE_PROFILE);


Убери это.


 
alt7   (2004-03-15 12:49) [5]

Спасибо, вместо CONNECT_UPDATE_PROFILE поставил 0 и заработало.
Читал хелп и так не понял про CONNECT_UPDATE_PROFILE ;)
То есть кусок кода с enum теперь не нужен? та беда с ERROR_SESSION_CREDENTIAL_CONFLICT не вылезет?


 
Verg ©   (2004-03-15 13:07) [6]


> CONNECT_UPDATE_PROFILE


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

Либо создавай без этого флага.



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

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.06 c
3-1078931984
TopLodger
2004-03-10 18:19
2004.04.11
SQL - обращение к полю по его имени


14-1082121286
Домарощинер
2004-04-16 17:14
2004.04.11
Хочу написать плагин к IDE Delphi. Помогите, кто чем может.


7-1080207963
aleXXoft
2004-03-25 12:46
2004.04.11
Как менять яркость/контраст и т.п. на видюхе?


1-1082484754
s666
2004-04-20 22:12
2004.04.11
Как совместить два типа PChar и String


3-1081653110
MadAngel
2004-04-11 07:11
2004.04.11
Поиск