Avatar billede deamill Nybegynder
29. juli 2002 - 10:12 Der er 7 kommentarer og
1 løsning

Streams i VC++

Hvis man arbejder på streams, kan man så kun læse en fil x tegn af gangen. Kan man f.eks. ikke lave en readAll ...

Med nedenstående læser man jo kun 25 tegn (hvad nu hvis man ikke kender størrelsen på filen??

char *list[30];
fread( list, sizeof( char ), 25, stream );
Avatar billede jpk Nybegynder
29. juli 2002 - 10:17 #1
Hvis du ikke kender størrelsen kan du naturligvis ikke læse hele indholdet på en gang!
Men du kan jo bare lave et while loop der læser indtil du når slutningen på filen...
Avatar billede deamill Nybegynder
29. juli 2002 - 13:43 #2
Hvad er så den nemmeste måde og arbejde med filer på?? Så vidt jeg kan se er der mange forskellige måder : FILE, CFile m.m.?
Avatar billede jpk Nybegynder
29. juli 2002 - 13:47 #3
Hvis du bruger MFC, bør du naturligvis bruge CFile...
Er det en fil fra disken du skal læse?
Avatar billede deamill Nybegynder
29. juli 2002 - 13:49 #4
Ja, det kunne f.eks. være en fil fra c drevet!
Avatar billede jpk Nybegynder
29. juli 2002 - 13:51 #5
Fx kan du gøre sådan for at læse al indholdet fra en fil

CFile File;
if(File.Open("C:\\MyFile.txt"", CFile::modeRead))
{
          // Get file length and check for zero length!
        int nFileLength = File.GetLength();
        if(nFileLength == 0)
            return false;

        // Create buffer and read all the  data into it
        char* pDataFromFile = new char[nFileLength+1];
        File.Read(pDataFromFile, nFileLength);
        pDataFromFile[nFileLength] = 0;

        // Gør hvad du vil med indholdet

        delete[] pDataFromFile;
}
Avatar billede deamill Nybegynder
30. juli 2002 - 08:26 #6
Her er hvad jeg gør (det samme som du har skrevet):

        CFile File;
        if(File.Open("C:\text.txt", CFile::modeRead))
        {
            // Get file length and check for zero length!
            int nFileLength = File.GetLength();
            if(nFileLength == 0)
            {
                //fejl
            }

            // Create buffer and read all the  data into it
            char* pDataFromFile = new char[nFileLength+1];
            File.Read(pDataFromFile, nFileLength);
            pDataFromFile[nFileLength] = 0;

            // Gør hvad du vil med indholdet

            printf(pDataFromFile);
            delete[] pDataFromFile;
        }
        else
        {
            // Get file length and check for zero length!
            int nFileLength = File.GetLength();
        }
    }

Problemet er at "File.Open("C:\text.txt", CFile::modeRead)" returnerer 0 selv om filen eksisterer?? Hvad kan problemet være?
Avatar billede deamill Nybegynder
30. juli 2002 - 08:44 #7
he he ... Det heder selvf. File.Open("C:\\text.txt", CFile::modeRead) og ikke File.Open("C:\text.txt", CFile::modeRead)!!!!

Nu virker det. linien delete[] pDataFromFile; Sletter den pointeren eller indholdet?

Tak for hjælpen!
Avatar billede jpk Nybegynder
30. juli 2002 - 08:54 #8
delete = single object
delete[] = array of objects

pDataFromFile peger på et array af chars (char[])...
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