Avatar billede lillefisk Nybegynder
14. juni 2005 - 14:00 Der er 7 kommentarer og
1 løsning

Finder ikke EOF ved filer over 144KB.

Hej eksperter

Jeg har skavet et program er indlæser en tekst fil til den møder EOF.
De virker helt filt så længe filerne er under 144KB. Men så snart at tekst filen er støre end 144KB kan den ikke file EOF.

Er der nogle der ved hvad der fore sager dette og hvordan kommer jeg ud over dette problem.

Jeg bruger MS Visual C++ 6.0

Her er den kode jeg andvender:
----------------------- C++ kode ---------------------------
#define INPUTFILE "D:\\test\\test.txt"

#include <iostream>
#include <fstream>
#include <io.h>
using namespace std;

void main() {
    unsigned long int lines = 0;    //!< Line nummer.
    char line[80] = {NULL};            //!< Indlæst line.
    ifstream in( INPUTFILE );
    if(!in) {
        cout << "\n************************************************\n";
        cout << "* File error! Cannot open file: " << INPUTFILE  << " !!! *\n";
        cout << "************************************************\n \n";
    }
    while(!in.eof()) {
        in.getline(line, sizeof(line));
        cout << "\n"<< lines << ":\t" << line;
        lines++;
    }
    in.close();
}
---------------------- End of C++ kode ---------------------

Når tekst filen er for stor bliver programmet ved med at tælle variablen “lines” op og udskriver den.
Avatar billede arne_v Ekspert
14. juni 2005 - 14:31 #1
det lyder mystisk

vi er mange som har læse større filer ...

prøv evt. med

while(in && !in.eof()) {
Avatar billede arne_v Ekspert
14. juni 2005 - 15:00 #2
og iøvrigt:

int main() {

og

    char line[80];
Avatar billede lillefisk Nybegynder
14. juni 2005 - 15:00 #3
Tjaa, Så stopper den helt når den har læst de første 144KB. Resten af filen bliver andrig læst.
Avatar billede arne_v Ekspert
14. juni 2005 - 15:09 #4
ok - så ved vi jo at der sker en fejl på streamen

in returnerer true hvis ingen fejl og false hvis fejl
Avatar billede arne_v Ekspert
14. juni 2005 - 15:09 #5
hvor mange file rhar du prøvet med ?

har du checket om der er noget usaædavenligt omkring det sted i filen ?
Avatar billede lillefisk Nybegynder
15. juni 2005 - 09:05 #6
Jeg har prøvet med 7 froskellige filer. Der er ikke nået spicael med det stad den stopper. Det er bare ren tekst.
Avatar billede lillefisk Nybegynder
15. juni 2005 - 09:43 #7
Når jeg intætter en if(in.fail() ) for jeg ”1” når den læser den sidste line inden den stopper med at læse.
Den nye node ser sådan ud.

----------------------- C++ kode ---------------------------

#define INPUTFILE "D:\\test\\test.txt"

#include <iostream>
#include <fstream>
#include <io.h>
using namespace std;

void main() {
    unsigned long int lines = 0;    //!< Line nummer.
    char line[80] = {NULL};            //!< Indlæst line.
    ifstream in( INPUTFILE );
    if(!in) {
        cout << "\n************************************************\n";
        cout << "* File error! Cannot open file: " << INPUTFILE  << " !!! *\n";
        cout << "************************************************\n \n";
    }
    while(in && !in.eof()) {
        in.getline(line, sizeof(line));
        if(in.fail()) cout << "\n*** " << in.fail() << " ***";
        cout << "\n"<< lines << ":\t" << line;
        lines++;
    }
    in.close();
}

---------------------- End of C++ kode ---------------------

Out out når den læser sidste line:
*** 1 ***
Avatar billede lillefisk Nybegynder
20. juni 2005 - 10:19 #8
Efter en gen installation af Visual C++ er der pludseligt ingen problemer.
%¤##@¤&/%¤"%¤&"¤@¤# MS
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