Hoe krijg ik de FileHandle voor een C ++ iostream?

Ik heb de Windows FileHandle nodig die is gekoppeld aan een C ++ iostream met mingw op Windows. Dit is waarschijnlijk hetzelfde als de UNIX-bestandsdescriptor die is gekoppeld aan een C ++ iostream op Windows. Weet iemand hoe het te vinden? Bedankt.

0
Ik heb het nodig, zodat ik het schijfbestand dat aan de iostream is gekoppeld, kan doorspoelen. stackoverflow.com/questions/8107436/…
toegevoegd de auteur vy32, de bron
Waar heb je het voor nodig? Afhankelijk van het werkelijke doel kan er een draagbaar/standaard antwoord zijn
toegevoegd de auteur sehe, de bron
Er is geen standaardmanier om dit te doen, om de eenvoudige reden dat een iostream helemaal niet geïmplementeerd is in termen van bestandshandvatten. Als je de implementatiedetails van je bibliotheek doorneemt, vind je de op handvat gebaseerde streamimpl en met een aantal lelijke casting kun je de verwijzing naar die in je iostream-object vinden en de hendel eruit halen.
toegevoegd de auteur antlersoft, de bron

1 antwoord

Did you see my answer, here:
How do I flush a stdlib output file on win32?

std::basic_filebuf *file_buf = dynamic_cast *>(f.rdbuf());
if (file_buf != 0) {
    struct to_get_protected_member : public std::basic_filebuf {
        int fd() { return _M_file.fd(); }
    };
    printf("your fd is %d\n", static_cast(file_buf)->fd());
}
2
toegevoegd
Ik deed. Nu krijg je twee punten!
toegevoegd de auteur vy32, de bron