Fórum Espaço Livre de um Disco na Rede #279133
27/04/2005
0
Bom dia,
Alguém poderia me ajudar, pois estou querendo saber o espaço disponivel em Disco de várias máquinas da rede, lembrando que o programa será executado em uma única máquina.
O espaço disponivel de uma máquina local (C:\) eu consigo saber, só não consigo saber o espaço de uma máquina da rede (\\teste\c...).
Atenciosamente,
Leandro.
Alguém poderia me ajudar, pois estou querendo saber o espaço disponivel em Disco de várias máquinas da rede, lembrando que o programa será executado em uma única máquina.
O espaço disponivel de uma máquina local (C:\) eu consigo saber, só não consigo saber o espaço de uma máquina da rede (\\teste\c...).
Atenciosamente,
Leandro.
Leandroborba
Curtir tópico
+ 0
Responder
Posts
22/12/2006
Jáder Medeiros
uses FileCtrl, SysUtils, Windows; Function GetFreeSpace(sPath: String): Int64; var sNetPath: String; dwMaxNetPathLen,RetornoMap: DWord; i: Integer; DriversDisponiveis: array of Char; const Drivers: array[1..24] of Char = (´C´,´D´,´E´,´F´,´G´,´H´,´I´,´J´,´K´,´L´,´M´,´N´,´O´,´P´,´Q´,´R´,´S´,´T´,´U´,´V´,´W´,´X´,´Y´,´Z´); begin Result := 0; if Pos(´:´,sPath) > 0 then Result := DiskFree(Ord(sPath[1]) - 64) else try dwMaxNetPathLen := MAX_PATH; SetLength(sNetPath,dwMaxNetPathLen); if Copy(sPath,Length(sPath),1) = ´\´ then Delete(sPath,Length(sPath),1); for i := Low(Drivers) to High(Drivers) do begin if DirectoryExists(Drivers[i]+´:\´) then if WNetGetConnection(PChar(String(Drivers[i]+´:´)),PChar(sNetPath),dwMaxNetPathLen) = NO_ERROR then if Pos(0,sNetPath) > 0 then if LowerCase(sPath) = LowerCase(Copy(sNetPath,1,Pos(#0,sNetPath)-1)) then Result := DiskFree(Ord(Drivers[i]) - 64) else else if LowerCase(sPath) = LowerCase(sNetPath) then Result := DiskFree(Ord(Drivers[i]) - 64) else else if ExtractFileDrive(sPath) = Drivers[i]+´:´ then Result := DiskFree(Ord(Drivers[i]) - 64) else else begin SetLength(DriversDisponiveis,High(DriversDisponiveis)+2); DriversDisponiveis[High(DriversDisponiveis)] := Drivers[i] end; if Result > 0 then Exit end; if Result = 0 then for i := Low(DriversDisponiveis) to High(DriversDisponiveis) do begin RetornoMap := WNetAddConnection(PChar(sPath),´´,PChar(String(DriversDisponiveis[i]+´:´))); case RetornoMap of ERROR_ACCESS_DENIED: raise Exception.Create(´Acesso negado.´); ERROR_ALREADY_ASSIGNED: raise Exception.Create(´A letra do drive especificada já está conectada.´); ERROR_BAD_DEV_TYPE: raise Exception.Create(´O tipo de dispositivo e o tipo de recurso não são compatíveis.´); ERROR_BAD_DEVICE: raise Exception.Create(´Letra inválida.´); ERROR_BAD_NET_NAME: raise Exception.Create(´Nome do servidor não é válido ou não pode ser localizado.´); ERROR_BAD_PROFILE: raise Exception.Create(´Formato incorreto de parâmetros.´); ERROR_CANNOT_OPEN_PROFILE: raise Exception.Create(´Conexão permanente não disponível.´); ERROR_DEVICE_ALREADY_REMEMBERED: raise Exception.Create(´Uma entrada para o dispositivo especificado já está no perfil do usuário.´); ERROR_EXTENDED_ERROR: raise Exception.Create(´Erro de rede.´); ERROR_INVALID_PASSWORD: raise Exception.Create(´Senha especificada inválida.´); ERROR_NO_NET_OR_BAD_PATH: raise Exception.Create(´A operação não foi concluída porque a rede não foi inicializada ou caminho é inválido.´); ERROR_NO_NETWORK: raise Exception.Create(´A rede não está presente.´); ERROR_LOGON_FAILURE: raise Exception.CreateFmt(´Não foi possível mapear o caminho ¬s pois é necessário informar usuário e senha.´,[sPath]) else begin Result := DiskFree(Ord(DriversDisponiveis[i]) - 64); WNetCancelConnection(PChar(String(DriversDisponiveis[i]+´:´)),False); case GetLastError of 2401: raise Exception.CreateFmt(´A unidade ¬s está sendo utilizada.´1310´Feche suas aplicações e tente novamente.´,[DriversDisponiveis[i]]); 1205: raise Exception.Create(´Não foi possível abrir o perfil´); 1206: raise Exception.Create(´Perfil do usuário não encontrado ou inválido´); 1208: raise Exception.Create(´Ocorreu um Erro específico na rede´); 2138: raise Exception.Create(´Rede não encontrada ou fora do ar´); 2250: raise Exception.CreateFmt(´Mapeamento ¬s inválido ou não encontrado´,[DriversDisponiveis[i]]) end; Break end end; end; except on E: Exception do begin E.Message := ´Não foi possível determinar o espaço disponível em ´+sPath+1310´Detalhe: ´+E.Message; raise end end; if Result <= 0 then raise Exception.Create(´Não foi possível determinar o espaço disponível em ´+sPath) end;
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)