Dateien kopieren mit Timeout
-
Hallo!
ich möchte gerne unter Windows in einem C++ Programm Dateien von CD bzw. DVD auf Platte kopieren. Nun gibt es CDs, die schon älter sind und sich nicht mehr lesen lassen. Manchmal scheint das ganze Programm zu hängen. Deshalb hätte ich gern eine Kopierfunktion, die nach einer bestimmten Zeit abbricht.
Wie mache ich sowas am einfachsten?Gruß,
Karl
-
ReadFile() mit
OVERLAPPED
in Kombination mit GetOverlappedResultEx() mit Timeout.
-
CopyFileEx kennst du, oder? Du kannst dort eine Callback-Funktion angeben und reagieren.
Alternativ gäbs natürlich noch das Windowprogramm robocopy, das aus deinem Programm aufgerufen werden kann. Mit vertretbarem Zeitaufwand kann soetwas nicht selbst geshrieben werden.
-
Statt overlapped IO könnte auch ein SetCommTimeouts() auf den Dateihandle helfen. Sieht auf jeden Fall einfacher aus.
-
Wäre mir neu dass SetCommTimeouts mit 'was anderem als COM Schnittstellen funktioniert. Bist du sicher dass das geht?
-
hustbaer schrieb:
Wäre mir neu dass SetCommTimeouts mit 'was anderem als COM Schnittstellen funktioniert. Bist du sicher dass das geht?
Nein, daher schrieb ich "könnte". Hätte ich wohl klarer formulieren können.
Edit:
Hab's gerade mal ausprobiert:
ERROR_INVALID_PARAMETER
.
Dann wohl doch overlapped...
-
Ich hab es jetzt so gemacht, dass ich einen externen Prozeß starte, der eine einzelne Datei kopiert. Dann warte ich mit WaitForSingleObject auf den Prozeß. Entweder der Prozeß endet 'normal', dann hat das Kopieren funktioniert oder der Timeout von WaitForSingleObject schlägt zu, dann weiss ich, dass das Kopieren nicht funktioniert hat.
Das funktioniert erst mal. Möglicherweise funktioniert das auch mit Threads, müsste man mal ausprobieren...Danke, für alle Vorschläge!
-
Das funzt ganz sicher mit Threads...ein Kopiervorgang würde ich immer in einen eignen Thread legen...alles andere ist "16-Bit"...jetzt werde ich ganz nostalgisch, da war es an der Tagesordnung, daß ein Programm auf einmal ganz stumm wurde...ich liebe diese Zeiten
-
-
@ralros
Hilf mir bitte hier mal. Ich verstehe die Motivation hinter Beiträgen wie deinen beiden letzten nicht. Inhaltlich ist das einfach nur totaler Quatsch. Also wieso sich die Arbeit machen überhaupt was zu schreiben?