Dieser einfache Code:Welche Berechtigungen sind erforderlich, um boost :: filesystem :: last_write_time erfolgreich auszuführen?
std::time_t tm = boost::filesystem::last_write_time(filename);
boost::filesystem::last_write_time(directory, tm);
löst eine „Operation nicht zulässig“ Ausnahme, wenn directory
ein Pfad durch einen Benutzer andere als die Ausführung des Codes gehört.
Ich bin ein bisschen durch diese verwirrt, wie ich bin den Umgang mit Verzeichnissen mit 777
oder rwxrwxrwx
Berechtigungen, und ich kann einfach ihre Änderungszeiten von touch
in einer Schale mit ändern.
Fehle ich etwas? Fordert Boost mehr Berechtigungen als benötigt? Gibt es eine Möglichkeit, das zu beheben?
Hier ist der entsprechende Code in Boost:
handle_wrapper hw(
create_file(ph.c_str(), FILE_WRITE_ATTRIBUTES,
FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0));
if (hw.handle == INVALID_HANDLE_VALUE)
return error_code(::GetLastError(), system_category);
return error_code(::SetFileTime(hw.handle, 0, 0, &last_write_time) != 0
? 0 : ::GetLastError(), system_category);
'GetLastError' und' SetFileTime' sind Windows-Funktionen. Ist das auf Linux, Cygwin oder etwas anderes? – leedm777
Linux, wie pro Tag. Ich habe das auch bemerkt, ich dachte Boost reimplementiert sie einfach. Oder vielleicht habe ich die falsche Datei bekommen. Punkt ist, es funktioniert, außer für diese skurrile Erlaubnis Sache. – UncleZeiv