Avatar billede mollevp Nybegynder
14. juli 2005 - 19:58 Der er 9 kommentarer og
1 løsning

Hjælp til fstream

Hej jeg sad lige og legede med at skrive og læse fra en fil - fik lavet følgende kode, men af en eller anden grund jeg ikke lige kan gennemsku dur det  bare ikke.. Håber I kan hjælpe, koden er her:

#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    // File to read and write to
    fstream test;
    // A small buffer for the reading
    char buffer[256];
   
    // fstream file opens in appending, reading and writing mode
    // we want to append the text
    test.open("example.txt", fstream::app | fstream::in | fstream::out);
   
    // Check whether the file is open
    if(!test.is_open()){
    cout << "Error opening file" << endl;
    return 1;
    }
   
    // Lets write something to the file
    test << "This is a line\n";
    test << "This is another line\n";
   
    // Lets read that from the file
    while(!test.eof()){   
    test.getline(buffer, 100);
    cout << buffer;
    }
   
    // Remember to close the file
    test.close();
   
    return 0;
}


MVH Morten
Avatar billede mollevp Nybegynder
14. juli 2005 - 19:58 #1
Skulle måske lige tilføje at jeg får "Error opening file" hver gang..

MVH Morten
Avatar billede arne_v Ekspert
14. juli 2005 - 20:02 #2
du skal close filen og åbne den for read (eller ihvertfald positionere dig
ved starten) inden du læser
Avatar billede arne_v Ekspert
14. juli 2005 - 20:02 #3
medmindre du har gang i noget direct access så vil jeg anbefale en ofstream
til at skrive of en ifstream til at læse fra (og med close)
Avatar billede mollevp Nybegynder
14. juli 2005 - 20:07 #4
Ok, jeg prøver det lige af..
Avatar billede mollevp Nybegynder
14. juli 2005 - 20:21 #5
Jeg lavede det om som du sagede til:

#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    // File to read and write to
    ofstream outFile;
    ifstream inFile;
   
    // A small buffer for the reading
    char buffer[256];
   
    // We start by writing to the file
    outFile.open("example.txt", ios::out | ios::app );
   
    // Check whether the file is open
    if(!outFile.is_open()){
    cout << "Error opening file" << endl;
    return 1;
    }
   
    // Lets write something to the file
    outFile << "This is a line\n";
    outFile << "This is another line\n";
   
    // Done writing - lets close
    outFile.close();

    // Open the file for reading
    inFile.open("example.txt");
   
    // Check whether the file is open
    if(!inFile.is_open()){
    cout << "Error opening file" << endl;
    return 1;
    }
   
    // Lets read that from the file
    while(!inFile.eof()){   
    inFile.getline(buffer, 100);
    cout << buffer;
    }
   
    // Remember to close the file
    inFile.close();
   
    return 0;
}


Det virker også fint, det undrer mig bare stadig at det først ikke dur? Jeg synes at have læst at hvis man åbner en fstream fil så kan man både læst og skrive til den.. Jeg kan godt se at der formentligt er nogle problemer med pointeren i filen (der nok i hvert fald skal spooles tilbage til starten af filen når der skal læses). Men den fejler allerede når jeg prøver at åbne filen, tror lige jeg vil eksperimentere lidt med det...
Smid et svar Arne, så får du lige dine point..

MVH Morten
Avatar billede arne_v Ekspert
14. juli 2005 - 20:23 #6
svar
Avatar billede arne_v Ekspert
14. juli 2005 - 20:26 #7
jeg gætter på at den brokker sig over kombinationen af fstream::app og fstream::out
Avatar billede arne_v Ekspert
14. juli 2005 - 20:26 #8
fstream::out => start med at skriv i starten af filen

fstream::app => start med at skriv i slutningen af filen

begge på samme tid er svært
Avatar billede arne_v Ekspert
14. juli 2005 - 20:27 #9
of fstream::in giver iøvrigt problemer hvis filen ikke eksisterer
Avatar billede mollevp Nybegynder
14. juli 2005 - 20:33 #10
he he tror du har fat i noget der:

>> fstream::out => start med at skriv i starten af filen
>>
>> fstream::app => start med at skriv i slutningen af filen

Jeg må vist heller lige læse om de flag igen :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester