• Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   14-02-2016

      Prezados membros do Fórum do Clube do Hardware,

      Está aberto o processo de seleção de novos moderadores para diversos setores do fórum. Os requisitos são:
        Pelo menos 1000 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas ao formulário abaixo:    Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • dif

      Poste seus códigos corretamente!   22-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Entre para seguir isso  
Seguidores 0
Guest ricpesilva

[Resolvido] C++

5 posts neste tópico

Olá galera que manja de C

Será que alguém pode me ajudar???

Preciso de uma função para gerar estatística de ultilização de area em disco por usuário. É urgente please.

[ ]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso depende muito do sistema operacional que você está usando, como ele controla os usuários; você teria que descobrir o local onde ficam os arquivos do usuário, e fazer uma contagem do tamanho do diretório.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok cara mas você poderia me enviar um exemplo + ou - de como eu crio essa função??? Não sei nem como começar pois a lógica já entendi.

[ ]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois não...

Veja o código em C:


/*    dsize.c      
(by Daniel K. O.)
Mostra o tamanho de um diret¢rio
Compilado no MinGW
*/

#include <stdio.h>
#include <stdlib.h>
#include <io.h>
#include <dir.h>
#include <string.h>

unsigned long DirSize(char *dir) {
    struct _finddata_t ff;  /* "ffblk" no compilador da Borland */
    char separador;
    unsigned long DirBytes = 0;
    char buff[FILENAME_MAX], buff2[FILENAME_MAX];
    int l, fh;

    separador = (dir[strlen(dir)-1]=='\\') ? '\0' : '\\';
    /* verifica se o último caracter é uma barra '\\'     */

    strcpy(buff, dir);
    l=strlen(buff);

    buff[l]=separador; /* coloca o separador ('\0' ou '\\')
                        * no final da string */
    buff[l+1]='\0';    /* e, obviamente, assegura que ela foi finalizada,
                        * com um '\0' */
    strcpy(buff2, buff);
    strcat(buff2, "*.*");

    if (!(fh=_findfirst(buff2, &ff)))
       if (ff.attrib!=_A_SUBDIR)  /* ff_attrib no Borland C */
          DirBytes+=ff.size;  /* ff_fsize no Borland C */
       else
         if (strcmp(ff.name, ".") && strcmp(ff.name, "..")) {
         /* ff_name no Borland C */
            strcpy(buff2, buff);
            strcat(buff2, ff.name);  
            DirBytes+=DirSize(buff2);
         }

    while (!_findnext(fh, &ff)) {  /* findnext() retorna 0 enquanto achar
                                     * algo no diret¢rio*/
          if (ff.attrib!=_A_SUBDIR)  
             DirBytes+=ff.size;  
          else
              if (strcmp(ff.name, ".") && strcmp(ff.name, "..")) {
                 strcpy(buff2, buff);
                 strcat(buff2, ff.name);
                 DirBytes+=DirSize(buff2);
              }
    }
   
    _findclose(fh);  /* pode não ser necessário no Borland C */
    return DirBytes;
}


int main(int argc, char *argv[]) {

    if (argc!=2) {
       printf("Mostra o tamanho de um diretório\n");
       printf("Formato: dsize diretorio\n");
       exit(1);
    }

    printf ("%lu bytes\n", DirSize(argv[1]));

    return 0;
}

Fiz esse código prá compilar no MinGW, prá Windows. Não é padrão ANSI/ISO C, por isso tem diferenças entre os compiladores. Coloquei comentários nos pontos que apresentam divergências, então é melhor conferir o help do seu compilador (e os arquivos io.h e dir.h (dos.h também, se tiver)) para saber os nomes das funções e constantes. Lembrando que em sistemas *nix pode ser necessário mais alterações ainda.

Se analisar a função DirSize, ela apenas faz uma análise recursiva para pegar cada arquivo do diretório e somar o seu tamanho ao tamanho total; quando ela achar algum subdiretório, ela chama a si própria novamente, passando como parâmetro o novo diretório encontrado; a função _findclose() pode ser desnecessária dependendo da implementação que você for usar (se ela não existir, é porque não precisa mesmo :P ).

Até mais.

PS:

:)  :(  :D  :P  ;)  ???  :-0  :angry:  }:)  :-(P  d-:  :Zz  :69  :??????'>  (:-D  :((  :**  :Z  :!!!  8D  :::)  :C  :))))  :-?)  #-()  $-)  88-)  ;-|  B-)  :-/  9-N  !-)  :-09  :-Baaa  :-V

Hm... quantos desses emoticons tão realmente funcionando??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu a força. Já me deu uma grande força. Estou indo bem estou fazendo algumas implementações e ajustes ainda na função qualquer problema eu retorno c/ mais algumas dúvidas.

[ ]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
Seguidores 0