C++-manual | ||
---|---|---|
Förutgående | Appendix B. Input/output på C:s vis | Nästa |
Att skriva till filer i C är enkelt att göra om man kan skriva till skärmen. Det enda som egentligen behöver göras är att specificera att utskriften skall gå till en annan fil än stdout som representerar skärmen. Därefter kan t.ex. printf() användas för att skriva data till filen.
Innan man kan skriva till filer måste de öppnas. En fil öppnas i C t.ex. med funktionen fopen(). Den definieras på följande sätt:
#include <stdio.h> |
FILE * fopen
(const char * path, const char * mode);
Funktionen vill alltså ha som en första parameter ett namn på en fil. Eftersom vi vill skriva till en fil behöver filen inte existera från tidigare. Den andra parametern mode anger vad vi vill göra med filen. Några olika strängar kan ges:
r för att öppna en fil för läsning.
r+ för att öppna en fil för läsning och skrivning.
w öppnar en fil för skrivning. Allt eventuellt tidigare innehåll i filen (om den existerade) förstörs. Filen skapas om den inte existerar.
w+ för att öppna en fil för läsning och skrivning. Filen skapas om den inte existerar.
a öppnar en fil för skrivning, men data skrivs till slutet av filen och tidigare innehåll förstörs inte. Filen skapas om den inte existerar.
a+ för att öppna en fil för läsning och skrivning, men data skrivs till slutet av filen.
Funktionen returnerar en pekare till en FILE, som är en struct som i C används för att representera en fil. Filerna stdin, stdout och stderr är av typen FILE. Om filen inte kunde öppnas av någon orsak kommer funktionen att returnera 0 för att indikera att öppnandet misslyckades.
En öppnad fil stängs med funktionen fclose():
#include <stdio.h.h> |
int fclose
(FILE * stream);
Denna funktion stänger en fil som öppnats med fopen(). Ett exempelprogram som öppnar och stänger en fil:
#include <stdio.h> int main () { // öppna filen för skrivning FILE * F = fopen ( "foo.txt", "w" ); // kunde vi öppna den? if ( F ) { // allt ok, skriv meddelande til skärmen printf ( "Filen öppnades ok\n" ); // stäng filen igen fclose ( F ); } else { // kunde inte öppna filen printf ( "Filen kunde inte öppnas!\n" ); } } |
När man öppnat en fil med fopen() kan man skriva till den med t.ex. en version av printf() som heter:
#include <stdio.h> |
int fprintf
(FILE * stream, const char * format, ...);
Denna skiljer sig från vanliga printf() endast genom att den tar en extra parameter som anger vilken fil man skall skriva till. Man kan även skriva till skärmen med fprintf(), men då måste man explicit ange stdout som den fil man skriver till:
fprintf ( stdout, "Hello world!\n" ); |
Vi kunde fylla på programmet från föregående avsnitt med olika fprintf()-satser, men det är inget svårt med att skriva till filer, så det lämnas som en övning till läsaren. :-)
För att skriva till filer teckenvis kan man t.ex. använda sig av en funktion som heter:
#include <stdio.h> |
int fputc
(int c, FILE * stream);
för att skriva tecknet c till filen stream.
I C finns en funktion fwrite() som kan vara praktisk då man vill skriva ut t.ex. innehållet i en vektor eller en struct till en fil. Den skriver ut innehållet i binär form till filen, precis som det är i minnet. Man bör dock notera att man inte kan skriva ut t.ex. pekare eller dylikt med fwrite(), eftersom den då skriver ut endast pekarens adress, inte det data som pekaren pekar på. Allmänt ser fwrite() ut på följande sätt:
#include <stdio.h> |
size_t fwrite
(void * ptr, size_t size, size_t nmemb, FILE * stream);
Parametrarna kräver en aning extra förklaringar. Den första parametern ptr är en pekare som pekar till det data som skall skrivas ut. Den andra är storleken på ett element som skall skrivas ut. Denna storlek kan fås med t.ex. sizeof(). Den tredje parametern nmemb (number of members) anger hur många element som skall skrivas ut. Om det är frågan om en vektor med t.ex. 10 element ges denna parameter värdet 10. Den sista parametern är filen som data skall skrivas till.
Mera information om funktionen finns i t.ex. man-sidan.
Förutgående | Hem | Nästa |
Utskrift till skärm | Upp | Inläsning från tangentbordet |