我的程序需要获取网上邻居的共享目录和共享目录里的文件名,也就是想获取网络邻居共享的文件的全路径,这如何实现? 请大虾多多指点!希望能给个例子看看!谢谢!!

解决方案 »

  1.   

    DWORD              entriesread;
    DWORD              totalentries;
    DWORD              resume;
    DWORD              i;
    DWORD              dwLevel;
    PSHARE_INFO_2      pBuf;
    PSHARE_INFO_2      pBuffer;
    NET_API_STATUS     nStatus;
    LPWSTR servername="192.168.0.57"; nStatus = NetShareEnum(servername,dwLevel,(PBYTE *)&pBuf,MAX_PREFERRED_LENGTH,&entriesread,&totalentries,&resume);可是老是报错87,不知何故
      

  2.   

    NetShareEnum
    NetShareEnum retrieves information about each shared resource on a server. The NetShareEnum function is obsolete. It is provided only for compatibility with LAN Manager and 16-bit versions of Windows. Win32-based applications should use the WNetEnumResource function.用WNetEnumResource看看,87应该是参数错误
      

  3.   

    粗略如下:每台机子启动以后,广播他已经启动的消息,其他启动的机子通过他的数据包获得主机名和域名,同时标识其机。
    每台机子建立一个共享文件,记录本机的共享目录,其他网内主机发送请求后,由其权限发出共享目录名。
    然后...........用NetServerEnum 列出所有的server
    再用NetFileEnum枚举出所有的共享文件。void EnumServer()
    {LPSERVER_INFO_100  pServerEnum;
       DWORD   dwResult, dwRead, dwTotal;   dwResult = ::NetServerEnum( NULL, 100, 
                             (BYTE**) &pServerEnum,
                              -1, &dwRead, &dwTotal,
                             SV_TYPE_ALL, NULL, 0 );
                             
       if ( dwResult == NERR_Success ){
          for ( DWORD i=0; i<dwRead; i++ )
             m_wndListBox.AddString( CString( (LPCWSTR) pServerEnum[ i ].sv100_name ) );
       }
    }void PrintNetFiles(LPWSTR server)
    { resumeh = 0;
     do
     {
      buff = NULL;  rc=NetFileEnum(
       (char *) server,
       NULL,
       NULL,
       3,
          (BYTE**)&buff,
       2048,
       &read,
       &total,
       &resumeh );
      if ( rc != ERROR_MORE_DATA && rc != ERROR_SUCCESS )
       break;
      for ( i = 0, curf = buff; i < read; ++ i, ++ curf )
      {
       printf( "%-12S %-15S  \n",
        curf->fi3_username, curf->fi3_pathname
        );  }
      if ( buff != NULL )
      NetApiBufferFree( buff ); } while ( rc == ERROR_MORE_DATA );  if ( rc != ERROR_SUCCESS ) PrintError( rc );}
    netbios api共享文件需要用户名和密码
    DWORD WNetAddConnection2(
      LPNETRESOURCE lpNetResource,  // connection details
      LPCTSTR lpPassword,           // password
      LPCTSTR lpUsername,           // user name
      DWORD dwFlags                 // connection options
    );
      

  4.   

    我实现了,就是用以上的netapi ,msdn上有
      

  5.   

    WNetEnumResource
    然后再WNetOpenEnum