Ir para conteúdo
Fórum Script Brasil
  • 0

Informações Sobre O Hd


Heldinho

Pergunta

Ae galera, tudo tranquilo com vocês??Estou precisando de ajuda.. preciso saber o tamanho do hd do usuario.. imagino q não haja uma funcão para isso, então se vocês me ajudarem a descobrir o # de cylindros, de cabeças e de setores por track, é só multiplicar tudo, depois multiplicar por 512 e dividir o resultado final por 1000000, ai teremos os MB q o hd tem.. alguém sabe ajudar??

PS: Rodrigo gomes, seu nome já está nos créditos do os wink.gif

Link para o comentário
Compartilhar em outros sites

19 respostass a esta questão

Posts Recomendados

  • 0

Helder, vou te ajudar, tem uma função do DOS q já faz isso tudo q você quer eu acho...Tentae Ok... wink.gif

system("chkdsk");

Vey isso ai dá certo, tentae... smile.gif

Ahhh se você quiser mais comandos do DOS me fala pois eu tenho um livor do DOS, tenho um monte tem ateh para ver a memória... tongue.gif

Link para o comentário
Compartilhar em outros sites

  • 0

já quebrei a cabeça, olha a descricao da funcao do gomes:


        MSC: unsigned _dos_getdiskfree(unsigned drv,struct diskfree_t *spc)


        - prototype in dos.h

        - drive =  1 = A:, 2 = B:, 3 = C:, ...
        - spc = structure to contains disk status information
        - returns 0 on success or DOS error code on failure

        struct diskfree_t
           {
           unsigned total_clusters;             - count of all disk clusters
           unsigned avail_clusters;             - free unallocated clusters
           unsigned sectors_per_cluster;
           unsigned bytes_per_sector;
           };

        - Turbo C uses getdfree()
        - see   INT 21,36


meu codigo :
#include <stdio.h>
#include <stdlib.h>

void main(void){
int cluster,head,spt;
struct diskfree_t *spc;
_dos_detdiskfree(3,spc);
cluster=diskfree_t->total_clusters;
head=diskfree_t->bytes_per_sector;
spt=diskfree_t->sectors_per_cluster;
printf("%d",cluster*head*spt*512);
}
o erro:
C:\djgpp\bin>gcc -o hd.exe hd.c
hd.c: In function `main':
hd.c:8: `diskfree_t' undeclared (first use in this function)
hd.c:8: (Each undeclared identifier is reported only once
hd.c:8: for each function it appears in.)
hd.c:9: dereferencing pointer to incomplete type
hd.c:10: dereferencing pointer to incomplete type
hd.c:4: warning: return type of `main' is not `int'

ajudem!! laugh.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Tenta o código abaixo.

Eu retirei do help do Borland 3.1.

#include <stdio.h>
#include <dos.h>
#include <process.h>

int main(void)
{
  struct diskfree_t free;
  long avail;

  if (_dos_getdiskfree(0, &free) != 0) {
    printf("Error in _dos_getdiskfree() call\n");
    exit(1);
  }
  avail = (long) free.avail_clusters
        * (long) free.bytes_per_sector
        * (long) free.sectors_per_cluster;
  printf("The current drive has %ld bytes available\n", avail);
  return 0;
}

Link para o comentário
Compartilhar em outros sites

  • 0

...valeu pela ajuda, o programa ateh compila sem erro, mas ele mostra um numero de bytes que não é o do meu hd(nem espaço livre e nem o tamanho total)..

Eu rodei o exemplo e funcionou corretamente.O que talvez possa dar errado é o tamanho do HD ser muito grande e estar "estourando" a capacidade da variavel. A variavel esta declarada como "long" que vai de -2.147.483.647 até +2.147.483.647 . Tente mudar de long para double , por exemplo e veja se resolve.

Ex:

avail = (double) free.avail_clusters
       * (double) free.bytes_per_sector
       * (double) free.sectors_per_cluster;

Link para o comentário
Compartilhar em outros sites

  • 0
...valeu pela ajuda, o programa ateh compila sem erro, mas ele mostra um numero de bytes que não é o do meu hd(nem espaço livre e nem o tamanho total)..

Eu rodei o exemplo e funcionou corretamente.O que talvez possa dar errado é o tamanho do HD ser muito grande e estar "estourando" a capacidade da variavel. A variavel esta declarada como "long" que vai de -2.147.483.647 até +2.147.483.647 . Tente mudar de long para double , por exemplo e veja se resolve.

Ex:

avail = (double) free.avail_clusters
       * (double) free.bytes_per_sector
       * (double) free.sectors_per_cluster;

A mioria dos programas antigos tinham esse bug.

Só reconheciam HD até 2GB. ohmy.gif

Link para o comentário
Compartilhar em outros sites

  • 0
...valeu pela ajuda, o programa ateh compila sem erro, mas ele mostra um numero de bytes que não é o do meu hd(nem espaço livre e nem o tamanho total)..

Eu rodei o exemplo e funcionou corretamente.O que talvez possa dar errado é o tamanho do HD ser muito grande e estar "estourando" a capacidade da variavel. A variavel esta declarada como "long" que vai de -2.147.483.647 até +2.147.483.647 . Tente mudar de long para double , por exemplo e veja se resolve.

Ex:

avail = (double) free.avail_clusters
       * (double) free.bytes_per_sector
       * (double) free.sectors_per_cluster;

A mioria dos programas antigos tinham esse bug.

Só reconheciam HD até 2GB. ohmy.gif

Gostaria de saber se alguém poderia me ajudar sobre o numero de Serie do HD ???

alguém conhece alguma rotina do tipo???

Grato

Erik Mota

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...