Você está na página 1de 11

9/12/2015

Programacin en C/Manejo de archivos - Wikilibros

ProgramacinenC
Manejodearchivos
DeWikilibros,lacoleccindelibrosdetextodecontenidolibre.
<ProgramacinenC
Cadenasdecaracteres

Manejodearchivos

EstructurasyUniones

Ascomohemosrevisadolasalidayentradaporpantallaytecladorespectivamente,veremosahoralaentraday/osalidadedatosutilizando
ficheros,locualserimprescindibleparaungrannmerodeaplicacionesquedeseemosdesarrollar.

Contenido
1 Ficheros
2 fopen
2.1 fclose
2.2 feof
2.3 rewind
3 Lectura
3.1 fgetc
3.2 fgets
3.3 fread
3.4 fscanf
https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Manejo_de_archivos

1/11

9/12/2015

Programacin en C/Manejo de archivos - Wikilibros

4 Escritura
4.1 fputc
4.2 fputs
4.3 fwrite
4.4 fprintf

Ficheros
ElestndardeCcontienevariasfuncionesparalaedicindeficheros,estasestndefinidasenlacabecerastdio.hyporlogeneralempiezan
conlaletraf,haciendoreferenciaafile.AdicionalmenteseagregauntipoFILE,elcualseusarcomoapuntadoralainformacindelfichero.
Lasecuenciaqueusaremospararealizaroperacionesserlasiguiente:
CrearunapuntadordeltipoFILE*
Abrirelarchivoutilizandolafuncinfopenyasignndoleelresultadodelallamadaanuestroapuntador.
Hacerlasdiversasoperaciones(lectura,escritura,etc).
Cerrarelarchivoutilizandolafuncinfclose.

fopen
Estafuncinsirveparaabrirycrearficherosendisco.
Elprototipocorrespondientedefopenes:
FILE * fopen (const char *filename, const char *opentype);

Losparmetrosdeentradadefopenson:
filename:unacadenaquecontieneunnombredeficherovlido.opentype:especificaeltipodeficheroqueseabrirosecrear.

https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Manejo_de_archivos

2/11

9/12/2015

Programacin en C/Manejo de archivos - Wikilibros

Unalistadeparmetrosopentypeparalafuncinfopenson:
"r":abrirunarchivoparalectura,elficherodebeexistir.
"w":abrirunarchivoparaescritura,secreasinoexisteosesobreescribesiexiste.
"a":abrirunarchivoparaescrituraalfinaldelcontenido,sinoexistesecrea.
"rt":abrirunarchivoparalecturayescritura,elficherodebeexistir.
"wt":crearunarchivoparalecturayescritura,secreasinoexisteosesobreescribesiexiste.
"r+brb+":Abreunarchivoenmodobinarioparaactualizacin(lecturayescritura).
"rb":Abreunarchivoenmodobinarioparalectura.
Adicionalmentehaytiposutilizando"b"(binary)loscualesnosernmostradosporahorayquesoloseusanenlossistemasoperativosqueno
pertenecenalafamiliadeunix.

fclose
Estafuncinsirveparapodercerrarunficheroquesehaabierto.
Elprototipocorrespondientedefclosees:
int fclose (FILE *stream);

Unvalorderetornoceroindicaqueelficherohasidocorrectamentecerrado,sihahabidoalgnerror,elvalorderetornoeslaconstanteEOF.
Unejemplopequeoparaabrirycerrarelarchivollamadofichero.inenmodolectura:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv)
{
FILE *fp;
fp = fopen ( "fichero.in", "r" );
if (fp==NULL) {fputs ("File error",stderr); exit (1);}
fclose ( fp );
return 0;
}
https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Manejo_de_archivos

3/11

9/12/2015

Programacin en C/Manejo de archivos - Wikilibros

Comovemos,enelejemploseutilizelopentype"r",queesparalalectura.
OtracosaimportanteesqueellenguajeCnotienedentrodesiunaestructuraparaelmanejodeexcepcionesodeerrores,poresoesnecesario
comprobarqueelarchivofueabiertoconxito"if(fp==NULL)".Sifopenpudoabrirelarchivoconxitodevuelvelareferenciaalarchivo
(FILE*),delocontrariodevuelveNULLyenestecasosedeberarevisarladirecciondelarchivoolospermisosdelmismo.Enestosejemplos
solovamosadarunasalidaconunretornode1quesirveparasealarqueelprogramaterminoporunerror.

feof
Estafuncinsirveparadeterminarsielcursordentrodelarchivoencontrelfinal(endoffile).Existeotraformadeverificarelfinaldel
archivoqueescompararelcaracterquetraefgetcdelarchivoconelmacroEOFdeclaradodentrodestdio.h,peroestemtodonoofrecela
mismaseguridad(enespecialaltratarconlosarchivos"binarios").Lafuncinfeofsiempredevolvercero(Falso)sinoesencontradoEOFen
elarchivo,delocontrarioregresarunvalordistintodecero(Verdadero).
Elprototipocorrespondientedefeofes:
int feof(FILE *fichero);

rewind
Literalmentesignifica"rebobinar",sitaelcursordelectura/escrituraalprincipiodelarchivo.
Elprototipocorrespondientederewindes:
void rewind(FILE *fichero);

Lectura
Unarchivogeneralmentedebeversecomounstring(unacadenadecaracteres)queestaguardadoeneldiscoduro.Paratrabajarconlos
archivosexistendiferentesformasydiferentesfunciones.Lasfuncionesquepodramosusarparaleerunarchivoson:
charfgetc(FILE*archivo)
char*fgets(char*buffer,inttamano,FILE*archivo)
size_tfread(void*puntero,size_ttamano,size_tcantidad,FILE*archivo)
intfscanf(FILE*fichero,constchar*formato,argumento,...)
https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Manejo_de_archivos

4/11

9/12/2015

Programacin en C/Manejo de archivos - Wikilibros

Lasprimerasdosdeestasfuncionessonmuyparecidasentresi.Perolatercera,porelnumeroyeltipodeparmetros,nospodemosdarcuenta
dequeesmuydiferente,poresolatrataremosapartejuntoalfwritequeessucontraparteparaescritura.

fgetc
Estafuncinleeuncaracteralavezdelarchivoqueestasiendosealadoconelpuntero*archivo.Encasodequelalecturaseaexitosa
devuelveelcaracterledoyencasodequenoloseaodeencontrarelfinaldelarchivodevuelveEOF.
Elprototipocorrespondientedefgetces:
char fgetc(FILE *archivo);

Estafuncinseusageneralmentepararecorrerarchivosdetexto.Amaneradeejemplovamosasuponerquetenemosunarchivodetexto
llamado"prueba.txt"enelmismodirectorioenqueseencuentraelfuentedenuestroprograma.Unpequeoprogramaqueleaesearchivoser:
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *archivo;
char caracter;
archivo = fopen("prueba.txt","r");
if (archivo == NULL){
printf("\nError de apertura del archivo. \n\n");
}else{
printf("\nEl contenido del archivo de prueba es \n\n");
while (feof(archivo) == 0)
{
caracter = fgetc(archivo);
printf("%c",caracter);
}
}
fclose(archivo);
return 0;
}

https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Manejo_de_archivos

5/11

9/12/2015

Programacin en C/Manejo de archivos - Wikilibros

fgets
Estafuncinestdiseadaparaleercadenasdecaracteres.Leerhastan1caracteresohastaqueleauncambiodelnea'\n'ounfinalde
archivoEOF.Enesteltimocaso,elcarcterdecambiodelnea'\n'tambinesledo.
Elprototipocorrespondientedefgetses:
char *fgets(char *buffer, int tamao, FILE *archivo);

Elprimerparmetrobufferlohemosllamadoasporqueesunpunteroaunespaciodememoriadeltipochar(podramosusarunarreglode
char).Elsegundoparmetroestamaoqueesellimiteencantidaddecaracteresaleerparalafuncionfgets.Yporultimoelpunterodel
archivoporsupuestoqueeslaformaenquefgetssabraaquearchivodebeleer.
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *archivo;
char caracteres[100];
archivo = fopen("prueba.txt","r");
if (archivo == NULL)
exit(1);
printf("\nEl contenido del archivo de prueba es \n\n");
while (feof(archivo) == 0)
{
fgets(caracteres,100,archivo);
printf("%s",caracteres);
}
system("PAUSE");
fclose(archivo);
return 0;
}

Esteeselmismoejemplodeantesconladiferenciadequeestehaceusodefgetsenlugardefgetc.Lafuncinfgetssecomportadela
siguientemanera,leerdelarchivoapuntadoporarchivoloscaracteresqueencuentreyaponerlosenbufferhastaqueleauncaractermenos
quelacantidaddecaracteresespecificadaentamaoohastaqueencuentreelfinaldeunalinea(\n)ohastaqueencuentreelfinaldelarchivo
https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Manejo_de_archivos

6/11

9/12/2015

Programacin en C/Manejo de archivos - Wikilibros

(EOF).Enesteejemplonovamosaprofundizarmasqueparadecirquecaracteresesunbuffer,lospormenoresseranexplicadosenlaseccin
demanejodinmicodememoria.
Elbeneficiodeestafuncinesquesepuedeobtenerunalineacompletaalavez.Yresultamuytilparaalgunosfinescomolaconstruccinde
unparserdealgntipodearchivodetexto.

fread
size_tfread(void*ptr,size_tsize,size_tcount,FILE*stream)
Estafuncinleeunbloquedeuna"stream"dedatos.Efectalalecturadeunarreglodeelementos"count",cadaunodeloscualestieneun
tamaodefinidopor"size".Luegolosguardaenelbloquedememoriaespecificadopor"ptr".Elindicadordeposicindelacadenade
caracteresavanzahastaleerlatotalidaddebytes.Siestoesexitosolacantidaddebytesledoses(size*count).
PARAMETROS:
ptr:Punteroaunbloquedememoriaconuntamaomnimode(size*count)bytes.
size:Tamaoenbytesdecadaelemento(delosquevoyaleer).
count:Nmerodeelementos,loscualestienenuntamao"size".
stream:PunteroaobjetosFILE,queespecificalacadenadeentrada.

fscanf
Lafuncinfscanffuncionaigualquescanfencuantoaparmetros,perolaentradasetomadeunficheroenlugardelteclado.
Elprototipocorrespondientedefscanfes:
int fscanf(FILE *fichero, const char *formato, argumento, ...);

Podemosverunejemplodesuuso,abrimoseldocumento"fichero.txt"enmodolecturayleyendodentrodeel.
#include <stdio.h>
https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Manejo_de_archivos

7/11

9/12/2015

Programacin en C/Manejo de archivos - Wikilibros

int main ( int argc, char **argv )


{
FILE *fp;
char buffer[100];
fp = fopen ( "fichero.txt", "r" );
fscanf(fp, "%s" ,buffer);
printf("%s",buffer);
fclose ( fp );
return 0;
}

Escritura
Ascomopodemosleerdatosdesdeunfichero,tambinsepuedencrearyescribirficherosconlainformacinquedeseamosalmacenar,Para
trabajarconlosarchivosexistendiferentesformasydiferentesfunciones.Lasfuncionesquepodramosusarparaescribirdentrodeunarchivo
son:
intfputc(intcaracter,FILE*archivo)
intfputs(constchar*buffer,FILE*archivo)
size_tfwrite(void*puntero,size_ttamano,size_tcantidad,FILE*archivo)
intfprintf(FILE*archivo,constchar*formato,argumento,...)

fputc
Estafuncinescribeuncarcteralavezdelarchivoqueestasiendosealadoconelpuntero*archivo.Elvalorderetornoeselcarcter
escrito,silaoperacinfuecompletadaconxito,encasocontrarioserEOF.
Elprototipocorrespondientedefputces:
int fputc(int carcter, FILE *archivo);

Mostramosunejemplodelusodefputcenun"fichero.txt",seescribiradentrodelficherohastaquepresionemoslateclaenter.
#include <stdio.h>
https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Manejo_de_archivos

8/11

9/12/2015

Programacin en C/Manejo de archivos - Wikilibros

int main ( int argc, char **argv )


{
FILE *fp;
char caracter;
fp = fopen ( "fichero.txt", "a+t" ); //parametro para escritura al final y para file tipo texto
printf("\nIntroduce un texto al fichero: ");
while((caracter = getchar()) != '\n')
{
printf("%c", fputc(caracter, fp));
}
fclose ( fp );
return 0;
}

fputs
Lafuncinfputsescribeunacadenaenunfichero.laejecucindelamismanoaadeelcarcterderetornodelneanielcarcternulofinal.El
valorderetornoesunnmerononegativooEOFencasodeerror.Losparmetrosdeentradasonlacadenaaescribiryunpunteroala
estructuraFILEdelficherodondeserealizarlaescritura.
Elprototipocorrespondientedefputses:
int fputs(const char *buffer, FILE *archivo)

paraversufuncionamientomostramoselsiguienteejemplo:
#include <stdio.h>
int main ( int argc, char **argv )
{
FILE *fp;
char cadena[] = "Mostrando el uso de fputs en un fichero.\n";
fp = fopen ( "fichero.txt", "r+" );
fputs( cadena, fp );
https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Manejo_de_archivos

9/11

9/12/2015

Programacin en C/Manejo de archivos - Wikilibros

fclose ( fp );
return 0;
}

fwrite
Estafuncinestpensadaparatrabajarconregistrosdelongitudconstanteyformaparejaconfread.Escapazdeescribirhaciaunficherouno
ovariosregistrosdelamismalongitudalmacenadosapartirdeunadireccindememoriadeterminada.Elvalorderetornoeselnmerode
registrosescritos,noelnmerodebytes.Losparmetrosson:unpunteroalazonadememoriadedondeseobtendrnlosdatosaescribir,el
tamaodecadaregistro,elnmeroderegistrosaescribiryunpunteroalaestructuraFILEdelficheroalqueseharlaescritura.
Elprototipocorrespondientedefwritees:
size_t fwrite(void *puntero, size_t tamano, size_t cantidad, FILE *archivo);

Unejemploconcretodelusodefwriteconsucontrapartefreadyusandofuncioneses:
#include <stdio.h>
int main ( int argc, char **argv )
{
FILE *fp;
char cadena[] = "Mostrando el uso de fwrite en un fichero.\n";
fp = fopen ( "fichero.txt", "r+" );
fwrite( cadena, sizeof(char), sizeof(cadena), fp ); //char cadena[]... cada posicin es de tamao 'char'
fclose ( fp );
return 0;
}

fprintf
Lafuncinfprintffuncionaigualqueprintfencuantoaparmetros,perolasalidasedirigeaunarchivoenlugardealapantalla.
https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Manejo_de_archivos

10/11

9/12/2015

Programacin en C/Manejo de archivos - Wikilibros

Elprototipocorrespondientedefprintfes:
int fprintf(FILE *archivo, const char *formato, argumento, ...);

Podemosverunejemplodesuuso,abrimoseldocumento"fichero.txt"enmodolectura/escriturayescribimosdentrodeel.
#include <stdio.h>
int main ( int argc, char **argv )
{
FILE *fp;
char buffer[100] = "Esto es un texto dentro del fichero.";
fp = fopen ( "fichero.txt", "r+" );
fprintf(fp, buffer);
fprintf(fp, "%s", "\nEsto es otro texto dentro del fichero.");
fclose ( fp );
return 0;
}

Cadenasdecaracteres

Manejodearchivos

EstructurasyUniones

Obtenidodehttps://es.wikibooks.org/w/index.php?title=Programacin_en_C/Manejo_de_archivos&oldid=293570
Categora: ProgramacinenC
Estapginafuemodificadaporltimavezel30nov2015alas08:02.
EltextoestdisponiblebajolaLicenciaCreativeCommonsAtribucinCompartirIgual3.0puedenaplicarsetrminosadicionales.
VaseTrminosdeusoparamsdetalles.

https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Manejo_de_archivos

11/11

Você também pode gostar