Wie bekomme ich das FileHandle für ein C ++ iostream?

Ich benötige das Windows FileHandle, das mit einem C ++ iostream unter Verwendung mingw auf Windows verbunden ist. Dies ist wahrscheinlich identisch mit dem UNIX-Dateideskriptor, der einem C ++ - Iostream unter Windows zugeordnet ist. Weiß jemand, wie man es findet? Vielen Dank.

0
Ich benötige es, damit ich die mit dem Iostream verbundene Datenträgerdatei löschen kann. stackoverflow.com/questions/8107436/…
hinzugefügt der Autor vy32, Quelle
Wozu brauchst du es? Abhängig vom tatsächlichen Ziel kann es eine tragbare/standardmäßige Antwort geben
hinzugefügt der Autor sehe, Quelle
Es gibt keinen Standard-Weg, dies zu tun, aus dem einfachen Grund, dass ein Iostream überhaupt nicht in Bezug auf Datei-Handles implementiert werden kann. Wenn Sie sich mit den Implementierungsdetails Ihrer Bibliothek beschäftigen, finden Sie das handle-basierte streamimpl und mit etwas hässlichem Casting können Sie den Verweis darauf in Ihrem iostream-Objekt finden und den Griff herausziehen.
hinzugefügt der Autor antlersoft, Quelle

1 Antworten

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
hinzugefügt
Ich tat. Jetzt bekommst du zwei Punkte!
hinzugefügt der Autor vy32, Quelle