Niet alleen had ik dat gezien (ik quotte dat nota bene!), maar dat leek me ook afdoende voor de topic starter. (f)stat werkt uitstekend onder UNIX, Linux en Windows, en alle andere systemen met een POSIX compliant standard C library. De topic starter vroeg ook niet om een ANSI oplossing, maar om een portable oplossing. Een POSIX functie is portable, anders mogen ze die P wel schrappen.
Maar als dit topic toch weer open is, kan ik ook mijn mailtje naar de topic starter wel even toevoegen aan de thread:
> Ik was eigenlijk op zoek naar een standaard C++ functie
> (posix is niet standaard c++ toch?).
>
> En in de manual bij stream functie vond ik geen filesize functie.
Uit je bericht maakte ik op dat het je om een C OF C++ functie te doen was, en de C functies zijn redelijk goed gestandaardiseerd. Een bekende truc met C++ streams is om de seek en tell methoden te misbruiken om te bepalen waar het einde van het bestand zich bevind. Voor 'gewone' bestanden (die gewoon op je harde schijf staan) werkt dit wel aardig, al vind ik het zelf niet echt netjes (dat wil zeggen; ik gebruik bij voorkeur stat()). Je krijgt dan code als deze:
{
std::ifstream input("bestandsnaam");
input.seekg(0, std::ios::end); // pointer naar het einde van de stream
int length = input.tellg(); // positie uitlezen als bestandslengte
char *buffer = new char[length]; // buffer alloceren
input.seekg(0, std::ios::begin); // pointer terug naar het begin
input.read(buffer, length); // gegevens inlezen
}
Feitelijk is dat een uitwerking van wat jij ook al suggereert: naar het einde seeken en weer terug. Ik vind dit zoals gezegd geen fantastische oplossing, omdat je nu code schrijft die niet uitdrukt wat de bedoeling is. Ik kan me voorstellen dat seekg ook daadwerkelijk in het bestand gaat seeken. Als ik nu geen gewone file open heb, maar (bijvoorbeeld) een gecomprimmeerd bestand, dat sequentieel ingelezen wordt (als ik me niet vergis hebben onder andere OGG en GIF bestanden hier last van) kan dit een best kostbare operatie zijn. Dit voorbeeld is misschien ver gezocht, maar ik vind het reden genoeg om stat() te gebruiken waar mogelijk.
[
Voor 2% gewijzigd door
Soultaker op 12-02-2003 20:20
. Reden: schrappen is met een r ]