Avatar billede testpilot_dk Nybegynder
04. oktober 2005 - 09:59 Der er 9 kommentarer og
1 løsning

Læsning af Fil

Hej!

Jeg har tidligere spurgt om hvordan den kan læse flere filer ind efter hinanden i den samme fstream.

Nu er mit problem bare at hvis nu en af disse filer ikke eksistere, så fejler mit program på den efterfølgende fil.

Min kode ser sådan ud.

        if(!m_in.is_open())
            printf("Filen findes ikke: ");
            m_in.flush();

HVordan får jeg i princippet reset min m_in ?

        m_in.clear();
        m_in.seekg(0, ios::beg);
        m_in.close();

Jeg benytter også dette til at sikre at den altid starter i toppen af den nye fil!

Men det løser ikke mit nuværende problem
Avatar billede arne_v Ekspert
04. oktober 2005 - 10:52 #1
hvad er problemet du forsøger at løse ?

umiddelbart kan jeg nemlig slet ikke se formålet med de besværligheder
Avatar billede testpilot_dk Nybegynder
04. oktober 2005 - 11:53 #2
Jeg har et problem, med at hvis den ikke findes filen, så returner m_in.is_open falsk, den efterfølgende fil. Bliver herefter ikke åbnet korrekt, det er mit problem
Avatar billede testpilot_dk Nybegynder
04. oktober 2005 - 16:04 #3
min m_in har jeg erklæret i klassen og denne bliver ikke slettet før jeg er helt færdig!

Kan den indeholde noget snavs, når den finder en fil som ikke eksistere!

Hvordan får jeg den reset
Avatar billede testpilot_dk Nybegynder
04. oktober 2005 - 16:25 #4
Det kan også være nok at få reset fail()

Hvordan gøres det!
Avatar billede testpilot_dk Nybegynder
04. oktober 2005 - 17:50 #5
Okay, min metode er sådan

Jeg har en liste med en masse input filer, når der er en af disse filer på listen som ikke eksistere fysisk på harddisken, så går mit program koldt.

Jeg har prøvet at tjekke om m_in.fail() er sand! det bliver den netop på en af disse filer, jeg kan så bare ikke få det til flag til at blive falskt igen.

hvordan gør jeg dette?
Avatar billede bertelbrander Novice
04. oktober 2005 - 20:08 #6
Jeg kan ikke rigtigt se problemet.
Jeg lavede et test program hvor jeg forsøger at læse første linie i en række filer, fil nummer 2 findes ikke:

#include <iostream>
#include <fstream>
#include <string>

char *Files[] =
{
  "amove.cpp",
  "something.not",
  "goto.cpp"
};

int main()
{
  std::string S;
  std::ifstream In;
  for(size_t i = 0; i < 3; i++)
  {
      In.open(Files[i]);
      if(In)
      {
        std::getline(In, S);
        std::cout << Files[i] << ": " << S << std::endl;
        In.close();
      }
      else
      {
        In.clear();
        std::cout << "Failed to open: " << Files[i] << std::endl;
      }
  }
}

Det virker som forventet.

Du kan prøve at undlade m_in.seekg(0, ios::beg); den behøves ikke, fil-pointeren vil automatisk blive sat til starten på filen.
Avatar billede testpilot_dk Nybegynder
05. oktober 2005 - 08:00 #7
Hej! nu har jeg forsøgt mig nogle forskellgie ting!

Det virker fint hvis man lige bytter om på close og clear

        m_in.close();
        m_in.clear();
        m_in.seekg(0, ios::beg);

Så virker det fino!
Så Bertelbrander send du et svar, for at lede mig den rigtige vej
Avatar billede testpilot_dk Nybegynder
05. oktober 2005 - 08:02 #8
og så skal man lige undlade m_in.seekg(0, ios::beg);

Den laver også noget snavs
Avatar billede bertelbrander Novice
05. oktober 2005 - 19:31 #9
Jeg samler ikke på point.
Avatar billede testpilot_dk Nybegynder
18. november 2005 - 18:23 #10
Lukker
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