C++-manual
Förutgående | Appendix B. Input/output på C:s vis | Nästa

# Inläsning från fil

Vid det här laget är inläsning från fil mycket enkelt. Vi har redan behandlat alla nästan funktioner som behövs. Det första som måste göras om man vill läsa från en fil på disken är att filen måste öppnas för läsning. Se avsnittet Öppna och stänga filer. Då filen är öppnad för läsning kan man använda t.ex. följande funktioner för att läsa data från filen:

    #include <stdio.h>

``int fgetc`(FILE * stream);`

``int fscanf`(FILE * stream, const char * format, ...);`

Dessa är båda varianter på `getchar()` respektive `scanf()`, med den skillnaden att man explicit anger en fil, istället för att anta filen `stdin`. Vi kan nu göra ett program som kopierar en fil effektivt:

    #include <stdio.h>
    #include <stdlib.h>

    int main (int argc, char * argv[]) {
      int c;
      FILE * Source;
      FILE * Destination;

      // kolla antalet argument
      if ( argc != 3 ) {
        // fel antal argument
        printf ("Fel antal argument!\n" );
        printf ("Användning: %s infil utfil\n", argv[0] );
        exit (EXIT_FAILURE);
      }

      // öppna fil för läsning
      if ( (Source = fopen (argv[1], "r" )) == 0 ) {
        // kunde inte öppna filen
        printf ("Kunde inte öppna filen '%s'\n", argv[1] );
        exit (EXIT_FAILURE);
      }

      // öppna fil för skrivning
      if ( (Destination = fopen (argv[2], "w" )) == 0 ) {
        // kunde inte öppna filen
        printf ("Kunde inte öppna filen '%s'\n", argv[2] );
        exit (EXIT_FAILURE);
      }

      // läs tecken ända tills vi får ett EOF (end of file)
      while ( (c = fgetc ( Source )) != EOF ) {
        fputc ( c, Destination );
      }

      // stäng alla filer
      fclose ( Source );
      fclose ( Destination );
    }

Programmets egentliga huvudslinga använder sig av `fgetc()` och `fputc()` för att läsa och skriva ett tecken i taget. Tecknet läses som en `int` så att man kan ha en speciellt tecken `EOF` som inte blandas ihop med vanliga tecken. Se mera om funktionerna på deras respektive `man`-sidor.

Förutgående | Hem | Nästa
Inläsning från tangentbordet | Upp | I/O på låg nivå