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

sintaxe para criar arquivos


nillprogramacao

Pergunta

:rolleyes: Bom dia. Estou precisando esclarer algumas duvidas em C++ , sera que alguém poderia me ajudar?

E o seguinte, gostaria de saber qual a sintaxe correta para fazer um algortimo, que criei um arquivo no "C:" com nome referente a data atual do sistema?

Exemplo: se hoje no calendariio do computador for 23/07/2010, o arquivo criado ficaria com este nome assim : "dados.23.07.2010.bin".

E todo dia ele irar criar um arquivo com data atual!

por favor se puder me responder isto, ficarei muito grato mesmo!.

Link para o comentário
Compartilhar em outros sites

24 respostass a esta questão

Posts Recomendados

  • 0

Você pode usar algumas funções da time.h.

Exemplo: (o nome estaria no filename);

#include <stdio.h>
#include <time.h>

int main () {
  time_t rawtime;
  struct tm *timeinfo;
  char filename[128];

  time (&rawtime);
  timeinfo = localtime (&rawtime);
  sprintf(filename, "dados.%d.%d.%d.bin", timeinfo->tm_mday, timeinfo->tm_mon, timeinfo->tm_year + 1900);
  
  return 0;
}

Abraços!

Link para o comentário
Compartilhar em outros sites

  • 0

O código do Durub tem alguns erros. O correto seria timeinfo->tm_mon e timeinfo->tm_year ao invés de timeinfo->mon e timeinfo->year. Além disso, timeinfo->year retorna número de anos passados após 1900.

O correto seria algo assim:

sprintf(filename, "dados.%d.%d.%d.bin", timeinfo->tm_mday, timeinfo->tm_mon, timeinfo->tm_year+1900);
E, se quiser que dia/mês sejam mostrados com pelo menos dois algarismos, fica assim:
sprintf(filename, "dados.%02d.%02d.%d.bin", timeinfo->tm_mday, timeinfo->tm_mon, timeinfo->tm_year+1900);

Poste aí se funcionou ou não.

Link para o comentário
Compartilhar em outros sites

  • 0
O código do Durub tem alguns erros. O correto seria timeinfo->tm_mon e timeinfo->tm_year ao invés de timeinfo->mon e timeinfo->year. Além disso, timeinfo->year retorna número de anos passados após 1900.

O correto seria algo assim:

sprintf(filename, "dados.%d.%d.%d.bin", timeinfo->tm_mday, timeinfo->tm_mon, timeinfo->tm_year+1900);
E, se quiser que dia/mês sejam mostrados com pelo menos dois algarismos, fica assim:
sprintf(filename, "dados.%02d.%02d.%d.bin", timeinfo->tm_mday, timeinfo->tm_mon, timeinfo->tm_year+1900);

Poste aí se funcionou ou não.

Realmente, escrevi bem rápido e lendo a documentação porcamente. Obrigado pelos avisos!

Vou corrigir no meu post, se não houver problema. (e acho que não há!)

Abraços!

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia, olhar não sei se fiz alguma coisa errada, mas copie a sintaxe igual vc´s me passou, e o seguinte, a variavel "filename", esta armazenando quase certo a data atual do sistema, tirando o mes que esta pegando um mes anterior. Agora não esta sendo criado o arquivo que eu tanto espero, e sim esta aparecendo 02 arquivo com nome muito esquesito : "makefile.win" e "main.o" todas vez que compilo e executo o programa.

Aguardo resposta!

Link para o comentário
Compartilhar em outros sites

  • 0

Ola, segue o codigo: estou utilizando o DevC++ 4.9.9.2, talves você me indique outra IDE?

#include <stdio.h>
#include <iostream.h>
#include <time.h>


int main(){
    
time_t rawtime;
struct tm *timeinfo;
char filename[128];

time  (&rawtime);
timeinfo = localtime(&rawtime);
sprintf(filename, "teste.%02d.%02d.%d.bin", timeinfo->tm_mday, timeinfo->tm_mon, timeinfo->tm_year+1900);
printf("Data atual em arquivo: %s", filename); 
system("pause");

    return 0;
    
}

Link para o comentário
Compartilhar em outros sites

  • 0

Você não colocou o código para criar arquivos. No seu caso, basta abrir o arquivo no modo de escrita (w) e fechá-lo (se o arquivo ainda não existir, será criado; do contrário, seu conteúdo será zerado).

FILE* file=fopen(filename,"w"); //abre o arquivo
if(file)
{
    fclose(file); //fecha o arquivo
}
else
}
    printf("Não foi possível criar o arquivo\n");
}

Esse link deve lhe ajudar: função fopen.

Quanto ao Dev, recomendo sim outra IDE. Uma boa opção é o Code::Blocks (você pode baixar uma versão que já vem com o compilador MingW instalado) ou mesmo o Microsoft Visual C++. Mas qualquer compilador vai gerar os arquivos .o ou .obj (a diferença é que geralmente eles são gerados numa pasta separada).

Link para o comentário
Compartilhar em outros sites

  • 0

Ola 'Jonathan Queiroz', muito obrigado pela força, com sua ajuda estou conseguindo terminar meu programa.

Criei varias funcoes dentro do programa com sua ajuda.

So me resta completar a ultima função a baixo!

Criar um algoritmo que identifique um determinado arquivo pela data de um dia anterior de hoje e apague este arquivo, para não ir acumulando arquivos na pasta deixar somente o do dia?

Este foi o que já consegui!.

Olhar se eu estiver fazendo algo errado me fale?

pois enquanto eu não coloque o comando break, não funcionou correto, pois quando não tinha o arquivo para excluir, o programa caia em loop, "Não foi possível excluir arquivo".

int apagar_arquivo_anterior(){
   
    char filename_anterior[128], filename_atual[128];
         time_t rawtime;
  struct tm *timeinfo;
         time  (&rawtime);
         timeinfo = localtime(&rawtime);

             sprintf(filename_anterior, "BDPROD.0.DB2.NODE0000.CATN0000.%02d.%02d.%d.001", timeinfo->tm_mday-1, timeinfo->tm_mon+1, timeinfo->tm_year+1900);
             
             printf("Excluir arquivo anterior:> %s\n", filename_anterior);
             //printf("\nteste de variavel global: %s\n", filename);  
             system("PAUSE");
             
       while (filename_anterior != filename)
             
              {
                printf("Não foi possível excluir arquivo\n");
               break;
               }  
         remove(filename_anterior);
       
          
            return 0;
                                }

Se ainda puder me ajudar!!

Independente, muito Obrigado mesmo... e fique com Deus

Editado por Jonathan Queiroz
Adicionar tag's (Jonathan)
Link para o comentário
Compartilhar em outros sites

  • 0

Olá nillprogramacao,

pelo que eu olhei na stdio tem uma função chamada remove() que faz isso aqui:

Deletes the file whose name is specified in filename.

This is an operation performed directly on a file; No streams are involved in the operation.

A sintaxe dela é essa aqui:

int remove ( const char * filename );

Daí então é só digitar o nome do arquivo, ex:

remove ("data.txt");

ou então se você tiver um vetor de caracteres:

remove(vetorChar);

Link para o comentário
Compartilhar em outros sites

  • 0

Este foi o que já consegui!.

Olhar se eu estiver fazendo algo errado me fale?

pois enquanto eu não coloque o comando break, não funcionou correto, pois quando não tinha o arquivo para excluir, o programa caia em loop, "Não foi possível excluir arquivo".

sem contar

int apagar_arquivo_anterior(){

char filename_anterior[128], filename_atual[128];
time_t rawtime;
struct tm *timeinfo;
time (&rawtime);
timeinfo = localtime(&rawtime);

sprintf(filename_anterior, "BDPROD.0.DB2.NODE0000.CATN0000.%02d.%02d.%d.001", timeinfo->tm_mday-1, timeinfo->tm_mon+1, timeinfo->tm_year+1900);

printf("Excluir arquivo anterior:> %s\n", filename_anterior);
//printf("\nteste de variavel global: %s\n", filename); 
system("PAUSE");

while (filename_anterior != filename)

{
printf("Não foi possível excluir arquivo\n");
break;
} 
remove(filename_anterior);


return 0;
}

Link para o comentário
Compartilhar em outros sites

  • 0

Como você só precisa remover o arquivo cuja data é um dia antes aquele loop não é necessário.

Você pode simplesmente fazer algo assim:

if(remove(filename_anterior)!=0)
{
    printf("Ocorreu um erro ao excluir o arquivo"); //em situações normais, provavelmente o arquivo não existe
}
else
{
    printf("Arquivo removido com sucesso");
}

Link para o comentário
Compartilhar em outros sites

  • 0

Ola Jonathan Queiroz, mais uma vez aki para te agradece pelas grandes dicas que você tem me passado, devagar estou conseguindo chegar no meu objetivo final, sobre aquele ultimo script que você me passou para excluir o arquivo com data do dia anterio, esta agora esta funcioanado sim esta excluido o arquivo anterior so que houve uma falha no meu algoritmo quando eu criei a funçao para excluir arquivo pois, quando chegar no primeiro dia do mes, (exemplo: dia 01.08.2010), ele teria que excluir o arquivo anterior que e o arquivo referente a data (exemplo: dia 31.07.2010 ), mas ele não excluir.

meu algortimo ficou assim considerando hoje dia primeiro:

sintaxe :

dia = timeinfo->tm_mday-1; // exemplo dia = 1-1 , a varialvel dia passara a ter 0. 

sprintf(filename_anterior, "BDPROD.0.DB2.NODE0000.CATN0000.%02d.%02d.%d.001",dia, mes, ano);
          
printf("\tArquivo a ser excluido:> %s\n", filename_anterior);
                          
                 
      if(remove(filename_anterior)!=0)
         {
              printf("\nOcorreu um erro ao excluir o arquivo!!\n"); //em situações normais, provavelmente o arquivo não existe
          }
      else
          {
              printf("\nArquivo removido com sucesso!!\n");
          }

Link para o comentário
Compartilhar em outros sites

  • 0

Tente algo assim:

time_t rawtime_yesterday=rawtime-(60 * 60 * 24);
char filename_yesterday[128];
struct tm* timeinfo_yesterday = localtime(&rawtime_yesterday);
sprintf(filename_yesterday, "dados.%02d.%02d.%d.bin", timeinfo_yesterday->tm_mday, timeinfo_yesterday->tm_mon+1, timeinfo_yesterday->tm_year + 1900);

Link para o comentário
Compartilhar em outros sites

  • 0

Jonathan, esta acusando erro nesta linha:

time_t rawtime_yesterday = rawtime-(60 * 60 * 24);
faco minima ideia que erro e este!! segue logo o codigo todo.
void apagar_arquivo_anterior(){
     
     time_t rawtime_yesterday = rawtime-(60 * 60 * 24);
     char filename_yesterday[128];
     struct tm* timeinfo_yesterday = localtime(&rawtime_yesterday);
     
      sprintf(filename_yesterday, "dados.%02d.%02d.%d.bin", timeinfo_yesterday->tm_mday, timeinfo_yesterday->tm_mon+1, timeinfo_yesterday->tm_year + 1900);
      printf("\tArquivo a ser excluido:> %s\n", filename_yesterday);
      //   sprintf(filename_anterior, "BDPROD.%02d.%02d.%d.001",dia, mes, ano);
     if(remove(filename_yesterday)!=0)
         {
              printf("\nOcorreu um erro ao excluir o arquivo!!\n"); //em situações normais, provavelmente o arquivo não existe
          }
      else
          {
              printf("\nArquivo removido com sucesso!!\n");
          }
        
                                   
         
                            }

Link para o comentário
Compartilhar em outros sites

  • 0

Testei aqui no Visual C++ e funcionou. Talvez seja necessário algum cast. Se possível poste a descrição do erro.

Edit:

Você editou o código enquanto postava. Provavelmente o erro que está ocorrendo é porque a variável rawtime (que representa a data atual) está fora do escopo.

Link para o comentário
Compartilhar em outros sites

  • 0

Jonathan ,esta são as tres linha que aparece quando vou compilar :

In function `void apagar_arquivo_anterior()':

`rawtime' undeclared (first use this function)

(Each undeclared identifier is reported only once for each function it appears in.)

Como eu conserto isso, eu estou usando DEVC++, você me sugeriu para usar micrsoft c++, instalei ele aki em minha maq, mas

ele perguntar tanta coisa na hora de criar um projeto, que acho que vou fazer um curso so para aprender abrir a unit correta

pois não sei nem onde ir, para começcar a digitar o programa. Sem contar que quando consigo abriu um projeto em FILE => NEW=>PROJECT=>CLR=>CLR Console Application,]

ele me dar isto na unit:

using namespace System;

int main(array<System::String ^> ^args)
{
    Console::WriteLine(L"Hello World");
    return 0;
}

Pensei em apagar, e fazer do jeito que sei, mas fiquei com medo de não dar certo.

o que você me diz ?

Link para o comentário
Compartilhar em outros sites

  • 0

Esse código é C#.NET (outra linguagem), não C++. Provavelmente você instalou o Microsoft Visual C#.

Quanto a esse erro, é porque a variável rawtime foi declarada em outro função e está fora do escopo da função apagar_arquivo_anterior. Uma opção é criar uma função apagar_arquivo e apenas passar como parâmetro o nome do arquivo.

Basta você calcular a data atual e, a partir dela, a data do dia anterior e o nome do arquivo. Algo assim:

//Variáveis
char filename_anterior[128], filename_atual[128];
//Data atual
time_t rawtime;
struct tm *timeinfo;
time (&rawtime);
timeinfo = localtime(&rawtime);
//Arquivo com a data atual
sprintf(filename, "BDPROD.0.DB2.NODE0000.CATN0000.%02d.%02d.%d.001", timeinfo->tm_mday, timeinfo->tm_mon+1, timeinfo->tm_year+1900);
//Data de ontem
time_t rawtime_yesterday;
struct tm *timeinfo_yesterday;
time (&rawtime_yesterday);
timeinfo = localtime(&rawtime_yesterday);
//Arquivo com a data de ontem
sprintf(filename_anterior, "BDPROD.0.DB2.NODE0000.CATN0000.%02d.%02d.%d.001", timeinfo_yesterday->tm_mday, timeinfo_yesterday->tm_mon+1, timeinfo_yesterday->tm_year+1900);
//Remove o arquivo
apagar_arquivo(filename_anterior);

Link para o comentário
Compartilhar em outros sites

  • 0

Óla Jonathan, seguinte mudei todo codigo agora fico mais claro de eu te explicar o que eu necessito:

crei esta funcao, e quero que ela seja global, quero que esta funcao apague qualquer arquivo.

Bastando simplismente fazer a chamada desta funçao!

int apaga_arquivo (){


    if(remove([b] O QUE COLOCO AKI PARA ELA SER GLOBAL [/b])!=0)
      {
         printf("\nOcorreu um erro ao excluir o arquivo!!\n"); //em situações normais, provavelmente o arquivo não existe
      }
     else
        {
         printf("\nArquivo removido com sucesso!!\n");
        }
            return 0;}
chamdada da funcao abaixo:
int apaga_arquivo_anterior(){


    printf("Excluir arquivo anterior:> %s\n", filename_yesterday);
    apaga_arquivo(filename_yesterday);

                            }
--------------------------------------------------------------------------------------------------------- funcao que calcular a a virada do mes , não estou conseguindo fazer este calculos abaixo, caclular virada do ano aki =>01.1.2010 => 31.12.2010 , que ter que fazer pra ano e mes
int calc_data_ontem(){






    sprintf(data_ontem, "%02d.%02d.%d",dia_a-1,mes_a,ano);
    printf("\tOntem:> %s\n",data_ontem);



    return 0;

Link para o comentário
Compartilhar em outros sites

  • 0
crei esta funcao, e quero que ela seja global, quero que esta funcao apague qualquer arquivo.

Bastando simplismente fazer a chamada desta funçao!

Você precisa fazer com que a função receba um parâmetro com o nome do arquivo

void apaga_arquivo(char* filename)
{
...
if(remove(filename)!=0)
{
...
}
else
{
...
}
}
Declarei a função como void porque ela não precisa retornar nenhum valor. Isso deve ser feito sempre que uma função não retornar nada.
int calc_data_ontem(){






    sprintf(data_ontem, "%02d.%02d.%d",dia_a-1,mes_a,ano);
    printf("\tOntem:> %s\n",data_ontem);



    return 0;
Para isso funcionar a variável filename_yesterday terá que ser declarada como global, o que não é a melhor opção. Uma opção é calcular novamente a data de hoje e diminuir um dia ou passar um parâmetro com a data atual (já calculada) e a partir dela calcular o dia anterior.
void apaga_arquivo_anterior(time_t rawtime_today)
{
    time_t rawtime_yesterday=rawtime_today-(60*60*24);
    struct tm *timeinfo_yesterday;
    timeinfo_yesterday = localtime(&rawtime_yesterday);

    char filename_yesterday[128];
    sprintf(filename_yesterday, "BDPROD.0.DB2.NODE0000.CATN0000.%02d.%02d.%d.001", timeinfo_yesterday->tm_mday, timeinfo_yesterday->tm_mon+1, timeinfo_yesterday->tm_year+1900);

    printf("Excluir arquivo anterior:> %s\n", filename_yesterday);
    apaga_arquivo(filename_yesterday);
}
int calc_data_ontem(){
    sprintf(data_ontem, "%02d.%02d.%d",dia_a-1,mes_a,ano);
    printf("\tOntem:> %s\n",data_ontem);

    return 0;
Isso não funciona porque você ainda está diminuindo um dia manualmente, ao invés de utilizar o código que havia postado acima. Segue o código completo:
#include <stdio.h>
#include <time.h>

void apaga_arquivo(char* filename)
{
    if(remove(filename)!=0)
    {
        printf("\nOcorreu um erro ao excluir o arquivo!!\n"); //em situações normais, provavelmente o arquivo não existe
    }
    else
    {
        printf("\nArquivo removido com sucesso!!\n");
    }
}

void apaga_arquivo_anterior(time_t rawtime_today)
{
    time_t rawtime_yesterday=rawtime_today-(60*60*24);
    struct tm *timeinfo_yesterday;
    timeinfo_yesterday = localtime(&rawtime_yesterday);

    char filename_yesterday[128];
    sprintf(filename_yesterday, "BDPROD.0.DB2.NODE0000.CATN0000.%02d.%02d.%d.001", timeinfo_yesterday->tm_mday, timeinfo_yesterday->tm_mon+1, timeinfo_yesterday->tm_year+1900);

    printf("Excluir arquivo anterior:> %s\n", filename_yesterday);
    //apaga_arquivo(filename_yesterday);
}

int main () {
  time_t rawtime;
  struct tm *timeinfo;
  char filename[128];

  time (&rawtime);
  timeinfo = localtime (&rawtime);
  sprintf(filename, "dados.%02d.%02d.%d.bin", timeinfo->tm_mday, timeinfo->tm_mon+1, timeinfo->tm_year + 1900);

  apaga_arquivo_anterior(rawtime);
  
  return 0;
}

Link para o comentário
Compartilhar em outros sites

  • 0

Ola 'Jonathan Queiroz' vou tetntar este codigo que você me passou, e tem como colocar uma determinada cor no texto dentro do if, se for uma resposta ele mostre azul se for outra mostre vermelho:

tipo:

if(remove(filename)!=0)
      {
         // se for esta mensagem mostre  a cor da fonte vermelho
         printf("\nOcorreu um erro ao excluir o arquivo!!\n"); //em situações normais, provavelmente o arquivo não existe
      }
     else
        {
            // se for esta mensagem mostre  a cor da fonte azul
         printf("\nArquivo removido com sucesso!!\n");
        }
            }

Link para o comentário
Compartilhar em outros sites

  • 0

Ola 'Jonathan Queiroz' , tenho algumas perguntas sobre linguagens de programação:

01) Atualmente qual linguagem você se dedica?

02)qual linguagem que esta mais em alta no mercado?

03)qual linguagem você me indica para se dominar ?

04)C# e uma evolucao do C++, porque a sintaxe não se assemelha?

05)O que fala a respeito de Java, com seus extensos codigos?

06) O que você fala Visual Studio ?

07) Qual a vantagen e a desvantagem de ser aprender java?

08 )Qual a vantagen e a desvantagem de ser aprender Visual Studio?

09)o que o mercado procura ASP ou PHP ou JSP, qual melhor?

10 ) Sera bom dominar Ruby que esta entrando no mercado e ganhando forças ?

Eu estou com algumas dificuldades em escolher uma linguagem, eu comecei a estudar PHP e c++ não fiz muitas coisas, já em JSP, tive uma grande facilidade mais o que me desanimou foi seus codigos extensos.

estou começando a estudar visual studio, C#, so que sempre fico pensando em JSP, apesar de eu ter ficado encantado com suas IDE ricas em componentes.

Link para o comentário
Compartilhar em outros sites

  • 0
tem como colocar uma determinada cor no texto dentro do if, se for uma resposta ele mostre azul se for outra mostre vermelho
É possível, mas nunca precisei fazer isso, então não sei a melhor forma. O único jeito que conheço (e acho que é um dos piores...) é utilizando a função system (biblioteca stdlib.h). Algo assim:

system("color e"); //cor: amarelo claro (e), fundo: padrão
system("cmd /t:e4");      //cor: vermelho (4), fundo: amarelo claro (e)

Esse link deve lhe ajudar: Cores do prompt de comando.

01) Atualmente qual linguagem você se dedica?
Principalmente C++, C# (para ASP.NET) e Javascript, apesar de ter conhecimento em várias outras.

02) Qual linguagem está mais em alta no mercado?
09)o que o mercado procura ASP ou PHP ou JSP, qual melhor?
Não sei responder bem a essas perguntas.

03) Qual linguagem você me indica para se dominar?
Isso depende muito do tipo de aplicação que vai fazer. Eu pessoalmente gosto muito de C++, especialmente por conta da eficiência e da liberdade que se tem para programar, mas isso algumas vezes acaba reduzindo um pouco a produtividade.

04) C# é uma evolucao do C++, por que a sintaxe não se assemelha?
Na verdade não é exatamente uma evolução, e sim uma linguagem nova. Mas eu considero que a sintaxe se assemelha bastante (case sensitive, estruturas de controle parecidas, etc.). A principal diferença fica por conta dos ponteiros (que em C# não existem).

05) O que fala a respeito de Java, com seus extensos codigos?
Não sei programar em Java (pretendo aprender futuramente), mas já vi alguns códigos e não os considero "extensos". Na verdade os códigos em C++ costumam ser maiores, já que é necessário implementar muitas coisas "na mão".

06) O que você fala Visual Studio ?
Considero uma excelente IDE. Utilizo aqui o Visual C++ e o Visual Web Developer.

07) Qual a vantagem e a desvantagem de ser aprender java?
Não programo em Java e, portanto, não posso falar muita coisa. Mas em relação a desvantagens, nenhuma: todo aprendizado é positivo.
08) Qual a vantagem e a desvantagem de ser aprender Visual Studio?

O Visual Studio facilita bastante o desenvolvimento, apenas certifique-se de saber o que é feito "por trás da IDE" para não se tornar completamente dependente.

10) Será bom dominar Ruby, que está entrando no mercado e ganhando forças?

Não sei programar em Ruby (pretendo aprender também), mas acho que é sempre bom dominar novas linguagens.

Link para o comentário
Compartilhar em outros sites

  • 0
Ola 'Jonathan Queiroz' , tenho algumas perguntas sobre linguagens de programação:

09) O que o mercado procura ASP ou PHP ou JSP, qual melhor?

10) Sera bom dominar Ruby que esta entrando no mercado e ganhando forças ?

09) No momento, creio que a maior disponibilidade de vagas (para web) seja PHP.

10) Se tenho uma linguagem para te recomendar, é Ruby. Depois de aprender o básico dela, use a framework Ruby on Rails e/ou Sinatra e comece a desenvolver aplicações web!

Um ótimo livro para Ruby: http://mislav.uniqpath.com/poignant-guide/book/ (é gratuito)

Se me lembro, tem uma versão em português. (ou várias)

Achei uma: http://why.nomedojogo.com/

Se for aprender, bom aprendizado! Ruby é uma ótima linguagem.

Abraços!

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,4k
×
×
  • Criar Novo...