2- Solicitar ao usuário seu nome e endereço. Gravar estas informações num arquivo de texto.
Crie um vetor com 10 elementos do tipo inteiro e preencha-o com valores aleatório de 0 à 50.
Armazene todo vetor no arquivo de texto. Armazene somente os 5 primeiros números num
arquivo binário. Os arquivos, de texto e binário, deverão ser definido pelo usuário, o qual
deverá informar o diretório e o nome do arquivo. Caso o diretório informado não exista,
o programa deverá criá-lo. Verificar possíveis erros e imprimir elegantemente o conteúdo do
arquivos.
// Elaborado por : Tiago Alexandre Pereira
// 1o. Eng da Computação A
#include "conio.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "dir.h"
#define tam_nom 50
#define tam_end 200
#define tam_vet 10
#define tam_vet2 20
void main()
{
/****Declaracao das variaveis utilizadas****/
char wnom[tam_nom],wend[tam_end],wnomaux[tam_nom]
char wendaux[tam_end];
char drive[MAXDRIVE],dir[MAXDIR],file[MAXFILE]
char ext[MAXEXT],path[MAXPATH];
char dir2[MAXDIR],arquivo[MAXFILE + MAXDIR],erro,c,*vchar;
char vchar2[tam_vet2],aux[2];
int flag,i,vet[tam_vet],vet2[tam_vet],vet3[tam_vet],drvdef;
//Ponteiro arquivo
FILE *arq;
//Valor default do drive
drvdef = getdisk();
randomize();
//Solicitar entrada destino do arquivo a ser gravado
do
{
erro='N';
clrscr();
printf("Diretorio destino:\n");
gets(path);
//flag=binario(drive|diretorio|arq.|extensao|curingas)
flag = fnsplit(path,drive,dir,file,ext);
//Tabela valores flag
//_______________________________________________
//|Drive|Diret.|Arq.|Ext.|Curingas| Flag | Resp.|
//| 0 | 0 | 0 | 0 | X | 0,1 | ERRO |
//| 0 | 0 | 0 | 1 | X | 2,3 | ERRO |
//| 0 | 0 | 1 | 0 | X | 4,5 | ERRO |
//| 0 | 0 | 1 | 1 | X | 6,7 | ERRO |
//| 0 | 1 | 0 | 0 | X | 8,9 | ERRO |
//| 0 | 1 | 0 | 1 | X | 10,11 | ERRO |
//| 0 | 1 | 1 | 0 | X | 12,13 | ERRO |
//| 0 | 1 | 1 | 1 | X | 14,15 | ERRO |
//| 1 | 0 | 0 | 0 | X | 16,17 | OK* |
//| 1 | 0 | 0 | 1 | X | 18,19 | ERRO |
//| 1 | 0 | 1 | 0 | X | 20,21 | OK |
//| 1 | 0 | 1 | 1 | X | 22,23 | OK |
//| 1 | 1 | 0 | 0 | X | 24,25 | OK* |
//| 1 | 1 | 0 | 1 | X | 26,27 | ERRO |
//| 1 | 1 | 1 | 0 | X | 28,29 | OK |
//| 1 | 1 | 1 | 1 | X | 30,31 | OK |
//-----------------------------------------------
// * - Solicitar digitacao do arquivo.
/***Setar drive para gravacao dos arquivos***/
if(strcmp(drive,"A:")== 0||strcmp(drive,"a:")==0)
setdisk(0);
else
if(strcmp(drive,"C:")==0||strcmp(drive,"c:")== 0)
setdisk(2);
else
if(strcmp(drive,"D:")==0||strcmp(drive,"d:")==0)
setdisk(3);
else
{
printf("Drive selecionado invalido.
Validos: A,C,D");
erro = 'S';
}
if(erro=='N')
{
erro = 'S';
//Solicitar digitacao do arquivo
if (flag ==16||flag == 17||flag == 24||flag == 25)
{
do{
printf("Arquivo:\n");
gets(arquivo);
strcpy(file,arquivo);
}while(arquivo[0]==NULL);
erro = 'N';
}
else
if((flag>=20&&flag<=23)||flag>=28)
{
strcpy(arquivo,file);
strcat(arquivo,ext);
erro='N';
}
if(erro != 'N')
{
printf("Destino invalido.\nPressione qualquer
tecla para continuar...");
getch();
}
}
}while(erro != 'N');
/***Setar diretorio para gravacao do arquivo***/
chdir("\\"); //Setar diretorio a partir da raiz
int j=0;
for(i=0;i<=strlen(dir);i++)
{
if(dir[i] != '\\')
{
dir2[j] = dir[i];
j++;
}
else
if(i!=0)
{
dir2[j]=NULL;
mkdir(dir2); //criar diretorio
chdir(dir2); //apontar path diretorio criado
j=0;
dir2[0] = NULL;
}
}
//Criar arquivo texto
if ((arq = fopen(arquivo,"w")) == NULL)
{
printf("Erro na criacao do arquivo.\n");
erro = 'S';
}
else
{
//Entradas usuario
clrscr();
printf("Nome: ");
gets(wnom);
printf("Endereco: ");
gets(wend);
//Gravar arquivo
fputs(wnom,arq);
fputs("\n",arq);
fputs(wend,arq);
fputs("\n",arq);
//Criar vetor com valores aleatorios e converter em char
j=0;
for(i=0;i<10;i++)
{
vet[i] = rand()%51;
itoa(vet[i],vchar,10);
if(vet[i]<10)
{
vchar--;
*vchar='0';
}
fwrite(vchar,sizeof(vchar[i]+1),1,arq);
}
fclose(arq);
if ((arq = fopen(arquivo, "r")) == NULL)
{
printf("Erro ao tentar abrir o arquivo.\n");
erro = 'S';
}
else
{
//Leitura do arquivo texto
clrscr();
printf("Impressao:\n");
fgets(wnomaux,sizeof(wnomaux),arq);
printf("Nome: %s",wnomaux);
fgets(wendaux,sizeof(wendaux),arq);
printf("Endereco: %s",wendaux);
//Leitura dos valores do vetor no arquivo texto
//para gravacao do arquivo binario
fgets(vchar2,sizeof(vchar2)+1,arq);
}
}
fclose(arq);
if (erro=='N')
{
//Criar arquivo binario
strcat(file,".bin");
if ((arq = fopen(file,"wb")) == NULL)
{
printf("Erro na criacao do arquivo.\n");
erro='S';
}
else
{
for(i=0;i<10;i++)
{
strncpy(aux,vchar2+(i*2),2);
vet2[i]=atoi(aux);
}
fwrite(vet2,sizeof(vet2),1,arq);
}
fclose(arq);
if (erro=='N')
{
//Imprimir vetor lido a partir do arquivo binario
if ((arq = fopen(file,"rb")) == NULL)
printf("Erro na criacao do arquivo.\n");
else
{
fread(vet3,sizeof(vet3),1,arq);
printf("Vetor:");
for(i=0;i<10;i++)
printf("%d ",vet3[i]);
}
}
}
//Setar drive defult
setdisk(drvdef);
//Aguardar comando para sair do programa
getch();
}
|