Avatar billede dehdar Nybegynder
02. maj 2008 - 22:09 Der er 12 kommentarer og
1 løsning

Tjekke om en fil .dat fil er tom?

Hej, er der nogen som har en smart metode, hvor man kan tjekke hvorvidt en fil er tom? Jeg prøver at bruge sizeof, den fortæller mig kun hvor meget filen fylder og ikke hvorvidt den er tom.

På forhånd tak.
Avatar billede mxs Nybegynder
02. maj 2008 - 22:30 #1
"Normally file sizes are maintained automatically. A file begins with a size of 0 and is automatically extended when data is written past its end. It is also possible to empty a file completely by an open or fopen call." fra http://www.gnu.org/software/libtool/manual/libc/File-Size.html#File-Size, så jeg vil gå udfra en sætning ala

if(sizeof(myFilePointer) == 0) printf("filen er tom");
Avatar billede dehdar Nybegynder
02. maj 2008 - 22:44 #2
Det var også det jeg mente, men følgende program udskriver 136 i stedet for 0, selvom fil.dat er helt tom...

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

int main()
{
    ofstream myFilePointer( "fil.dat", ios::out );

    cout << sizeof(myFilePointer); // 136

    return 0;
}
Avatar billede mxs Nybegynder
02. maj 2008 - 22:48 #3
Oh. Gik udfra at det var C vi snakkede om. Her får du jo bare størrelsen på dit objekt :)
Avatar billede mxs Nybegynder
02. maj 2008 - 22:51 #4
Et smart eksempel hentet fra http://www.cplusplus.com/doc/tutorial/files.html (helt i bunden),

// obtaining file size
#include <iostream>
#include <fstream>
using namespace std;

int main () {
  long begin,end;
  ifstream myfile ("example.txt");
  begin = myfile.tellg();
  myfile.seekg (0, ios::end);
  end = myfile.tellg();
  myfile.close();
  cout << "size is: " << (end-begin) << " bytes.\n";
  return 0;
}
Avatar billede dehdar Nybegynder
02. maj 2008 - 22:56 #5
Tak for hjælpen :) Du må gerne ligge et svar.

Ved du forresten om der findes en kommando, som viser hvorvidt inputbufferen er tom eller ej? ^^
Avatar billede mxs Nybegynder
02. maj 2008 - 23:03 #6
Kommando? Altså om der findes en måde at tjekke om streambufs array er tom?
Avatar billede dehdar Nybegynder
02. maj 2008 - 23:29 #7
Jep :)
Avatar billede mxs Nybegynder
02. maj 2008 - 23:57 #8
Hmmm er ikke sikker på jeg ved hvad du mener. Men du skal vel ind på noget filebuf faktisk. Og noget rdbuf, http://cplusplus.com/reference/iostream/ofstream/rdbuf.html
Avatar billede dehdar Nybegynder
03. maj 2008 - 00:24 #9
Her er et eksempel på hvad jeg kunne tænke mig at skrive.

Pseudokode:

if( inputbuffer is empty )
cout << input buffer is empty
else
ignore(100, '\n');

Men jeg aner ikke om det kan lade sig gøre. Har rodet en del med cplusplus.com, men synes ikke rigtigt jeg kan finde noget eller også så har jeg fundet det, men bare ikke forstået det, hehe.
Avatar billede mxs Nybegynder
03. maj 2008 - 00:35 #10
Altså hvis du vil kontrollere om filen er tom, så tag mit første eksempel :)
Avatar billede mxs Nybegynder
04. maj 2008 - 00:08 #11
Fandt du ud af det?
Avatar billede dehdar Nybegynder
04. maj 2008 - 00:22 #12
Mit første spørgsmål fik jeg besvaret udmærket, så tak for det :) Hvad angår inputbufferen er jo dog stadig lidt i tvivl.

Det jeg godt kunne tænke mig er, at få returneret antal af karakterer i inputbufferen. Jeg har ledt og spurgt en del steder og har efterhånden fået det indtryk, at det ikke umiddelbart kan lade sig gøre på en simpel måde?
Avatar billede mxs Nybegynder
18. maj 2008 - 20:03 #13
Nej. Så skal du jo trylle input bufferen frem fra den pågældende steam og derefter tælle det char array der hænger ved.
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