Filou Geschrieben 15. August 2005 Geschrieben 15. August 2005 HILFE, PROBLEM! Ich kopiere eine ZIP-Datei über das Netzwerk mit CopyFile. Die Datei ist 20 MB groß und es dauert ein paar Sekunden bis es kopiert ist. Das Programm möchte jetzt aber sofort nach dem CopyFile ausgeführt ist die Datei entpacken. Wie kann ich vorher prüfen, dass die Datei schon fertig kopiert ist??? Hat jemand eine Idee? Hab NULL ahnung LG, Filou Zitieren
Klotzkopp Geschrieben 15. August 2005 Geschrieben 15. August 2005 Bei CopyFileEx kannst du eine Callbackfunktion angeben, die aufgerufen wird, wenn ein Teil des Vorgangs abgeschlossen ist. Damit kannst du feststellen, wann die Datei kopiert ist. Zitieren
Filou Geschrieben 15. August 2005 Autor Geschrieben 15. August 2005 Bei CopyFileEx kannst du eine Callbackfunktion angeben, die aufgerufen wird, wenn ein Teil des Vorgangs abgeschlossen ist. Damit kannst du feststellen, wann die Datei kopiert ist. Ok, ERSTMAL VIELN DANK FÜR DEINE ANTWORT! Was ist eine Callbackfunktion? Ich schaue mal in der MSDN nach wie das geht... Zitieren
Filou Geschrieben 16. August 2005 Autor Geschrieben 16. August 2005 Ich habe die beiden Dateien "Winbase.h; include Windows.h" eingebunden. Aber die Funktion "CopyFileEx" ist nicht bekannt obwohl das Studio soragr die Paramtere Vorschlägt wenn wen "CopyFileEx(" eingebe... Woaran liegt das denn??? Zitieren
Klotzkopp Geschrieben 16. August 2005 Geschrieben 16. August 2005 To compile an application that uses this function, define the _WIN32_WINNT macro as 0x0400 or later. For more information, see Using the SDK Headers. Hast du das gemacht? Zitieren
Filou Geschrieben 16. August 2005 Autor Geschrieben 16. August 2005 Hast du das gemacht? Ja, hab es so definiert: #define _WIN32_WINNT 0x0400 Bringt aber immernoch die Meldung: 'CopyFileEx' : nichtdeklarierter Bezeichner Zitieren
Klotzkopp Geschrieben 16. August 2005 Geschrieben 16. August 2005 Ja, hab es so definiert: #define _WIN32_WINNT 0x0400 Wo? Hast du noch andere defines gesetzt? Zitieren
Filou Geschrieben 16. August 2005 Autor Geschrieben 16. August 2005 Wo? Hast du noch andere defines gesetzt? Habs ganz oben unter den includes gestezt. sonst hab ich keine defines Zitieren
Klotzkopp Geschrieben 16. August 2005 Geschrieben 16. August 2005 unter den includesNicht gut Zitieren
Filou Geschrieben 16. August 2005 Autor Geschrieben 16. August 2005 Nicht gut sondern? :confused: habs jetzt direkt in die Funktion gesetzt, geht aber trotzdem nicht Zitieren
Klotzkopp Geschrieben 16. August 2005 Geschrieben 16. August 2005 sondern? :confused: Dieses Präprozessorsymbol wird in winbase.h abgefragt. Wenn du es erst setzt, nachdem winbase.h abgearbeitet wurde, ist die Wirksamkeit begrenzt. Die define-Direktive muss vor die include-Direktive. Zitieren
Filou Geschrieben 16. August 2005 Autor Geschrieben 16. August 2005 Dieses Präprozessorsymbol wird in winbase.h abgefragt. Wenn du es erst setzt, nachdem winbase.h abgearbeitet wurde, ist die Wirksamkeit begrenzt. Die define-Direktive muss vor die include-Direktive. Ok, jetzt habe ich es ganz an den Anfang kopiert... aber die Funktion CopyFileEx ist weiterhin unbekannt Zitieren
Klotzkopp Geschrieben 16. August 2005 Geschrieben 16. August 2005 Benutzt du vorkompilierte Header (stdafx.h)? Falls ja: Setz die define-Direktive da rein, vor alle include-Direktiven. Falls nicht: Akzeptiert dein Compiler das hier? #define _WIN32_WINNT 0x400 #include <windows.h> int main() { CopyFileEx(0, 0, 0, 0, 0, 0); }[/code] Zitieren
Filou Geschrieben 16. August 2005 Autor Geschrieben 16. August 2005 Ok, danke, danke!!! jetzt funktionierts Aber jetzt bekomme ich die Fehlermeldung "Funktion akzeptiert keine 4 parameter" dabei werde sogar in der AutoHilfe 4 angegeben. Schau mal bitte, ich habs so gemacht: void CKopierenDlg::Kopieren() { //Callback Routine um zu überprüfen wann die Datei fertig kopiert wurde DWORD CALLBACK CopyProgressRoutine( LARGE_INTEGER TotalFileSize, LARGE_INTEGER TotalBytesTransferred, LARGE_INTEGER StreamSize, LARGE_INTEGER StreamBytesTransferred, DWORD dwStreamNumber, DWORD dwCallbackReason, HANDLE hSourceFile, HANDLE hDestinationFile, LPVOID lpData); m_csStatus = "Neue Dateien werden herruntergeladen."; _mkdir("C:\\ifbtemp");//Verzeichnis erstellen BOOL X = CopyFileEx( "\\\\10.50.100.1\\gemeinsam\\tis_info\\tisupdate\\rar.exe","C:\\ifbtemp\\rar.exe",CopyProgressRoutine,COPY_FILE_FAIL_IF_EXISTS); } Zitieren
Filou Geschrieben 16. August 2005 Autor Geschrieben 16. August 2005 Also ich weiß nicht genau wie ich das jetzt prüfen soll ob die Datei vollständig kopiert wurde... Zitieren
Klotzkopp Geschrieben 16. August 2005 Geschrieben 16. August 2005 CopyFileEx braucht 6 Parameter. Sagt jedenfalls die MSDN Library. Warum deklarierst du die Callbackfunktion in der Kopieren-Methode? Zitieren
Filou Geschrieben 16. August 2005 Autor Geschrieben 16. August 2005 CopyFileEx braucht 6 Parameter. Sagt jedenfalls die MSDN Library. Warum deklarierst du die Callbackfunktion in der Kopieren-Methode? Na ich weiß nicht so genau was diese Callbackfunktion macht. Ich denke mal da gibt es einen Parameter der mir sagt, wann es fertig kopiert hat und den muss ich dann wieder abfragen. und dazu muss er doch in der Funktion sein, in der ich prüfen will ob es fertig kopiert hat, oder? Zitieren
Klotzkopp Geschrieben 16. August 2005 Geschrieben 16. August 2005 Äh, bist du wirklich sicher, dass CopyFile zurückkommt, bevor die Datei komplett kopiert wurde? Ich hab da meine Zweifel, und werde das gleich mal testen. Zitieren
Guybrush Threepwood Geschrieben 16. August 2005 Geschrieben 16. August 2005 Also MoveFile wartet definitiv bis das Verschieben abgeschlossen ist, deshalb würde ich sagen das CopyFile das auch macht... Zitieren
Filou Geschrieben 16. August 2005 Autor Geschrieben 16. August 2005 Äh, bist du wirklich sicher, dass CopyFile zurückkommt, bevor die Datei komplett kopiert wurde? Ich hab da meine Zweifel, und werde das gleich mal testen. Also ich hab immer nur auf das LED meiner Festplatte geschaut und die hat immer noch schwer geschuftet obwohl das Programm schon am haltepunkt angekommen ist. Das Programm soll später Dateien über das Internet kopieren und da wird das sicherlich länger dauern.... Zitieren
Klotzkopp Geschrieben 16. August 2005 Geschrieben 16. August 2005 Also ich hab immer nur auf das LED meiner Festplatte geschaut und die hat immer noch schwer geschuftet obwohl das Programm schon am haltepunkt angekommen ist.Das lag dann aber nicht an CopyFile. Bei mir kommt der Aufruf erst dann zurück, wenn die Datei kopiert wurde. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.