Tamanho do disco - hd size - hard disk size

Olá senhores!

Alguém sabe como pegar o tamanho do HD ?

Abraços.

Somente no Java 6.0 essa informação estará disponível.
File.getTotalSpace()

Se precisar disso antes, é necessário escrever uma DLL (ou .so) em C que chame uma API do sistema operacional. Não faça isso sem saber EXATAMENTE o que está fazendo.

Fala thingol!

Quanto a versão 6.0 eu sabia que ía ser lançado isso…

karakas!!! que f… heim …rs
Agora to f…

vamos lah…

o que seria um “.so” ?

o que você acha mais facil eu fazer ?

vlw

a) O correspondente de uma DLL do Windows é um .so no Unix / Linux.
b) Se você não encontrar isso pronto, então não faça (a menos que você saiba bem C e a API do seu sistema operacional - pelo que imagino você deve trabalhar com Windows).

dah p/ tentar fazer uma gambiarra do tipo:
roda um ‘dir’ (windows) ou ‘df’ (linux) e ‘parseia’ o resultado…
no caso do windows, vc ainda tem q levar em consideracao a linguagem do SO na hora de fazer o parse…

boa sorte.

apesar de eu nao gostar nada dessa sugestão q eu vou te dar… la vai

vc pode fazer uma gambiarra master… que executa uma linha de comando do seu sistema operacional… parseia o retorno… e ta la… hehehhe…
como disse… é uma gambiarra master… mas dependendo do q for, é mais simples do que fazer todo esquema em JNI

abraços

[quote=takeshi10]dah p/ tentar fazer uma gambiarra do tipo:
roda um ‘dir’ (windows) ou ‘df’ (linux) e ‘parseia’ o resultado…
no caso do windows, vc ainda tem q levar em consideracao a linguagem do SO na hora de fazer o parse…

boa sorte.[/quote]

caraca… demorei tanto pra dar submit que vc postou exatamente o que eu ia falar antes de mim! :smiley:

abraços!

De fato, se você souber C e seguir o tutorial de JNI que está no portal JavaFree - http://www.javafree.org - você pode até tentar.

Para saber qual a API a usar, consulte o MSDN.

GetDiskFreeSpaceEx

The GetDiskFreeSpaceEx function retrieves information about the amount of space that is available on a disk volume, which is the total amount of space, the total amount of free space, and the total amount of free space available to the user that is associated with the calling thread.

BOOL GetDiskFreeSpaceEx(
LPCTSTR lpDirectoryName,
PULARGE_INTEGER lpFreeBytesAvailable,
PULARGE_INTEGER lpTotalNumberOfBytes,
PULARGE_INTEGER lpTotalNumberOfFreeBytes
);
Parameters
lpDirectoryName
[in] A pointer to a null-terminated string that specifies a directory on a disk.
If this parameter is NULL, the function uses the root of the current disk.

If this parameter is a UNC name, it must include a trailing backslash, for example, \MyServer\MyShare.

This parameter does not have to specify the root directory on a disk. The function accepts any directory on a disk.

lpFreeBytesAvailable
[out] A pointer to a variable that receives the total number of free bytes on a disk that are available to the user who is associated with the calling thread.
This parameter can be NULL.

Windows Me/98/95: This parameter cannot be NULL.
If per-user quotas are being used, this value may be less than the total number of free bytes on a disk.

lpTotalNumberOfBytes
[out] A pointer to a variable that receives the total number of bytes on a disk that are available to the user who is associated with the calling thread.
This parameter can be NULL.

Windows Me/98/95: This parameter cannot be NULL.
If per-user quotas are being used, this value may be less than the total number of bytes on a disk.

To determine the total number of bytes on a disk or volume, use IOCTL_DISK_GET_LENGTH_INFO.

lpTotalNumberOfFreeBytes
[out] A pointer to a variable that receives the total number of free bytes on a disk.
This parameter can be NULL.

Return Values
If the function succeeds, the return value is nonzero.

If the function fails, the return value is 0 (zero). To get extended error information, call GetLastError.

ULARGE_INTEGER é o "jlong" em JNI, assim como PULARGE_INTEGER é "jlong *". Mais detalhes não dou porque é meio chato fazer isso funcionar.

Bom,
Fiz algo parecido com o que vc quer, mas ele imprime apenas a qtdade livre e não o tamanho total do HD.
Caso queira obter o tamanho do HD é mto fácil, apenas alterando algumas linhas do código que postei aquí:

http://www.guj.com.br/posts/list/0/30176.java

Se quiser pode portar para JNI, ou executar o processo do java e fazer o parse da String como eu estou fazendo atualmente.

Qquer dúvida é só perguntar.

[]'s

Aew galera!

Muito obrigado mesmo pela ajuda!!!

chicobento !!! bem legal o que vc fez!

Mas é o seguinte galera… o tempo de entrega do projeto está curto!
Resolvi utilizar a JDK 6.0 - Mustang.

Como jah tinha lhe falado thingol, eu já tinha visto que o mustang tem isso. Agora resolvi utiliza-lo!

Assim que testar o projeto falo pra vocês o resultado!

Abraços!

Aew pessoal!

Já fiz testes! Vai o código aí:

[code]public class Main {
public static void main(String[] args) {
File meuHD = new File(“c:/”);
double conversao = 9.31322575 * Math.pow(10, -10);

 	System.out.println("Total:" + meuHD.getTotalSpace() * conversao);
	System.out.println("Livre:" + meuHD.getFreeSpace()  * conversao);
	System.out.println("Usado:" + meuHD.getUsableSpace()* conversao);
}

}
[/code]

O único que não veio correto pra mim foi o getUsableSpace mas não irei precisar dele.

Eu multiplico o retorno por 9.31322575 × 10e-10 … para converter de bytes para GB.

Abraços!

Porque você não usa “9.31322574615478515625e-10”, ou melhor ainda, “1.0 / 1024 / 1024 / 1024”?

Escrever Math.pow (10, -10) envolve calcular logaritmos e exponenciais em tempo de execução. Escrever (1.0 / 1024 / 1024 / 1024) só envolve algumas divisões em tempo de compilação, e além disso é mais claro (e mais exato) que o número mágico que você calculou.

Verdade thigol!!!

vou fazer isso…
eu naum sabia q pode fazer “9.31322574615478515625e-10” …

mas vou fazer com “1.0 / 1024 / 1024 / 1024”

vlw e abraço!