2016-03-23 3 views
3

Ich schreibe eine C++ - Anwendung, die zwischen mindestens Ubuntu 15, FreeBSD 11, MacOS X und Windows 7 (kompiliert mit GCC, Clang und MSVC) portierbar sein muss. Alle diese Systeme haben eine Vorstellung von einer Datei mit mindestens einem Änderungsdatum/-zeitpunkt.Portable Möglichkeit zum Einstellen der Dateiänderungszeit in C++?

Die Frage ist: Gibt es eine Möglichkeit, eine Datei Änderungszeit mit einem einzigen Stück C++ - Code, der auf allen diesen Systemen funktionieren würde?

NB: durch die Dateimodifikationszeiteinstellung ich es auf einen festgelegten Wert, nicht die aktuelle Zeit (das heißt nicht die Berührungs Funktionalität) mittlere Stellung.

+5

Ich hasse es zu sagen, aber Sie können es mit Boost tun. – Nick

+0

In reinem C++ ist es nicht möglich – DimChtz

+1

Lesen Sie die Datei und schreiben Sie sie zurück. – Zereges

Antwort

4

Die C++ - Standardbibliothek hat (noch) keine Vorstellung von der Datei (, die mit C++17 passieren kann). Im Moment müssen Sie sich auf einige plattformübergreifende Bibliotheken wie boost::filesystem oder Qt verlassen.

+1

Nein, das Dateisystem wird nie Teil der STL. Es muss jedoch in die Standardbibliothek aufgenommen werden. –

+0

Vielen Dank, dass Sie darauf hingewiesen haben. Ich habe den Fehler behoben. – Claudio

6

Mit boost::filesystem, können Sie diese Funktion get/set the time verwenden:

void last_write_time(const path& p, const std::time_t new_time); 

Dies auch auf einigen Compiler als experimental Feature auf einigen compiliert wie gcc oder msvc zur Verfügung steht. Diese verwenden dieselbe API, aber einen anderen experimentellen Namespace. Wenn Sie also Boost nicht verwenden möchten und solange es noch nicht in den Standard integriert ist, können Sie es mit bedingter Kompilierung und Verwendung der Anweisung portierbar machen.

Verwandte Themen