CopyFile USB-Stick
-
Hallo in die Runde.
Mit nachfolgender Funktion kopiere ich mir Dateien von meinem USB Speicher:
//--------------------------------------------------------------------------- bool _fastcall TForm1::CopyFilesFromUSB(char cDrv, const String strDestDir) // --------------------------------------------------------------------------- { WIN32_FIND_DATA FindFileData; HANDLE hFind; bool result = false; String tmpStr; tmpStr.sprintf(L"%c:\\", cDrv); if(SetCurrentDir(tmpStr)) { tmpStr.sprintf(L"*.bin"); hFind = FindFirstFile(tmpStr.t_str(), &FindFileData); tmpStr = GetCurrentDir(); if (hFind != INVALID_HANDLE_VALUE) { tmpStr = strDestDir + "\\" + FindFileData.cFileName; if(!CopyFile(FindFileData.cFileName, tmpStr .t_str(), false)) { Memo1->Lines->Add(tmpStr.sprintf(L"Couldn't copy file! Error: %d", GetLastError())); result = false; } else { if(!DeleteFile(FindFileData.cFileName)) Memo1->Lines->Add("Couldn't delete file from device!"); result = true; } } } FindClose(hFind); // Nachtrag return result; }
Das ganze funktioniert wunderbar. Wenn ich jedoch den Speicher während des Kopierens entferne und wieder anschließe ohne mein Programm zu beenden, bekomme ich bei erneutem kopieren mit CopyFile die Fehlermeldung (2) Datei kann nicht gefunden werden.
Die Datei ist aber definitiv vorhanden. Die Werte in den Variablen sind auch korrekt. Starte ich mein Programm neu, funktioniert es wieder, so wie es soll...Hat jemand ne Idee, was hier faul ist?
Danke schonmal im Voraus.
Gruß Locke
-
Musst Du das Handle nicht wieder freigeben nach verlassen der Funktion?
-
Danke für den Tipp.
Hat aber am Verhalten leider nichts geändert.
-
Ist das vielleicht ein Timing Problem? Wie viel Zeit vergeht denn zwischen dem Kopieren der Datei und dem Einstecken des USB Sticks?
-
Hatte ich auch schon, bei mir gings nach :
Hardware sicher entfernen ...
in der Taskleiste.
grüssle
-
@DocShoe:
ich sage mal mehrere Sekunden.@Smitty:
leider nicht bei mirdass ich den Stick ziehe hat den folgenden Grund:
Mein USB-Speicher ist in einem Gerät verbaut, welches mit einem Akku betrieben ist und einen Timer besitzt, der nach Ablauf das Gerät ausschaltet (um Strom zu sparen...) Diesen Timer kann ich selbst nicht beeinflussen.
Das Ziehen des Sticks bewirkt das selbe, als wenn der Timer des Gerätes abgelaufen ist.Gruß Locke
-
Hallo,
Ich denke, die Frage ist im WinAPI-Forum besser aufgehoben.