Warum kopiert std::filesystem::copy für gemountete Telefone unter Linux keine Datei, das Rohkopieren jedoch schon?

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Warum kopiert std::filesystem::copy für gemountete Telefone unter Linux keine Datei, das Rohkopieren jedoch schon?

by Guest » 06 Jan 2025, 22:15

Ich habe einen Code für mich selbst erstellt, um mehrere Dateien zu verschieben/kopieren, und er funktionierte, wenn er auf Dateien auf demselben System (in meinem Fall Linux) angewendet wurde.
Aber als ich meine angeschlossen habe Telefon über USB und aktivierten Dateiübertragungsmodus, dann schlug das Kopieren an einen anderen Ort auf dem gemounteten Telefonlaufwerk mit der Funktion std::filesystem::copy fehl, die offensichtlich den Hauptteil des Kopierens im Code darstellt. Die Datei wird tatsächlich erstellt, aber der Inhalt wird nicht ausgefüllt, so dass sie leer bleibt und null Bytes für ihre Größe anzeigt.
Wenn ich eine Datei verschieben möchte, verwende ich die Funktion std::filesystem: :rename, dann geht die Datei einfach verloren – es wird nie etwas erstellt.

Code: Select all

void actual_copy_or_move(
const std::filesystem::path& current_path,
const std::filesystem::path& target_path)
{
std::error_code err_code {};
if (m_do_move)
{
// Moving the file.
std::filesystem::rename(current_path, target_path, err_code);
}
else
{
// Straightforward copy, without any extra checks.
auto copy_lambda {[&current_path, &target_path]() {
std::ifstream input_stream {current_path, std::ios::binary};
std::ofstream output_stream {target_path, std::ios::binary};

if (!input_stream.good() || !output_stream.good()) {
std::wcerr

Top