Kopieren mit CopyFile. Ersetzen klappt nicht.



  • Habe dir schon geantwortet, schau mal einen Post vorher...



  • _matze schrieb:

    Ähm, das WINAPI vor deinem Aufruf muss natürlich weg! Das ist der Typ des Rückgabewerts der Funktion, den schreibt man nicht beim Aufruf vorne hin...

    Ja so was hab ich mir schon gedacht. Sorry, bin kein c Programmierer und hab es auch nicht vor zu werden. Ich muss nur eine Exe erstellen die eine bestimmte Datei vom Server kopiert. Und hab da so meine Problemchen, wie dieses wenn ich die ReplaceFile Methode benutzen möchte.

    `ReplaceFile' undeclared (first use this function)

    Muss ich da noch irgendwas includen oder warum kennt er die Funktion nicht?

    Vielen Dank

    Rahan



  • Außer windows.h musst du nichts inkludieren. Zeig doch am besten noch mal den kompletten, aktuellen Code.



  • Hier hat die Funktion ein paar Parameter mehr:
    http://msdn.microsoft.com/en-us/library/aa365512(VS.85).aspx

    Wenn du bloss ne Datei kopieren willst, sollte CopyFile doch reichen?
    http://msdn.microsoft.com/en-us/library/aa363851(VS.85).aspx

    Wenn CopyFile() fehl schlägt, sollte der Rückgabewert false sein, und GetLastError() dürfte den Grund verraten?



  • geeky schrieb:

    Wenn du bloss ne Datei kopieren willst, sollte CopyFile doch reichen?

    Tja, leider kopiert mir CopyFile nicht die Datei, wenn sie schon vorhanden ist.
    Alternativ könnte ich sie ja vorher löschen. Möchte ich aber nicht unbedingt.

    Hier immer noch mein aktueller Code:

    #include <cstdlib>
    #include <iostream>
    #include <windows.h>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {   
         //Kopiert das File
    	ReplaceFile("c:\\temp\\t2\\test.xls","c:\\temp\\t1\\test.xls","c:\\temp\\t2\\test.bak");
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    

    Sagt er die Methode ist undeclared, weil sie nich alle Parameter hat?
    Hat diese nun 4 oder 6 Parameter?
    hab es auch schon mit diesem Versucht:

    ReplaceFile("c:\\temp\\t2\\test.xls","c:\\temp\\t1\\test.xls","c:\\temp\\t2\\test.bak",REPLACEFILE_WRITE_THROUGH);
    //Kennt er REPLACEFILE_WRITE_THROUGH nicht
    
    ReplaceFile("c:\\temp\\t2\\test.xls","c:\\temp\\t1\\test.xls","c:\\temp\\t2\\test.bak",0x00000001);
    //Funzt auch nicht
    
    ReplaceFile("c:\\temp\\t2\\test.xls","c:\\temp\\t1\\test.xls","c:\\temp\\t2\\test.bak",0x00000001,,);
    //Funzt auch nicht
    

    Wie denn nun?



  • rahan schrieb:

    geeky schrieb:

    Wenn du bloss ne Datei kopieren willst, sollte CopyFile doch reichen?

    Tja, leider kopiert mir CopyFile nicht die Datei, wenn sie schon vorhanden ist.

    Wenn man den dritten Parameter auf false setzt tut sie das wohl:
    "If this parameter is FALSE and the new file already exists, the function overwrites the existing file and succeeds."

    Wenn das doch trotzdem fehlschlägt, wird false zurückgeliefert und GetLastError() sagt näheres...

    ReplaceFile() hat laut msdn 6 Parameter, die auch alle gesetzt werden müssen.
    "Reserved"/"Optional" heisst in der msdn-doku meistens, dass man NULL bzw. 0 für den Parameter angeben sollte...



  • Da ich genauso wenig glauben konnte, was du hier erzählst, habe ich es gerade mal ausprobiert. Und selbstverständlich verhält sich CopyFile wie beschrieben und überschreibt bereits existierende Dateien, wenn der dritte Parameter FALSE ist.

    BOOL b=CopyFile("C:\\test.txt","C:\\test_rgne.txt",FALSE);
    b=CopyFile("C:\\test.txt","C:\\test_rgne.txt",FALSE);
    

    Probier dieses Beispiel bitte mal bei dir aus. Wenn das nicht klappt, dann muss halt mit GetLastError geklärt werden, warum.



  • rahan schrieb:

    Sorry, bin kein c Programmierer und hab es auch nicht vor zu werden. Ich muss nur eine Exe erstellen die eine bestimmte Datei vom Server kopiert.

    Was spricht gegen ein einfaches Shell-Script? Für so etwas würde ich doch keinen Compiler anschmeißen.



  • _matze schrieb:

    Da ich genauso wenig glauben konnte, was du hier erzählst, habe ich es gerade mal ausprobiert. Und selbstverständlich verhält sich CopyFile wie beschrieben und überschreibt bereits existierende Dateien, wenn der dritte Parameter FALSE ist.

    BOOL b=CopyFile("C:\\test.txt","C:\\test_rgne.txt",FALSE);
    b=CopyFile("C:\\test.txt","C:\\test_rgne.txt",FALSE);
    

    .

    Hey _matze,

    ich versteh die Welt nicht mehr. Ich habe es heute morgen dauernd ausprobiert.
    Mal mit false mal mit 0 mal mit -1. Es hat nie funktioniert.
    Jetzt auf einmal funtz es wunderbar. Muss ich nicht verstehn. (FALSE ist doch das selbe wie false oder?)

    Naja vielen Dank nochmal und sorry, dass ich euch so verrückt gemacht habe.

    Gruß Rahan



  • rahan schrieb:

    FALSE ist doch das selbe wie false oder?

    Nicht wirklich, false ist ein eingebauter (C++-)Typ, FALSE nur ein simples define auf 0. In dem Fall sollte es aber egal sein. "(FALSE)false" dürfte auch 0 ergeben und somit funktionieren (kannst du ja bei Interesse noch ausprobieren).



  • _matze schrieb:

    false ist ein eingebauter (C++-)Typ

    false ist kein Typ 😃

    😉



  • rahan schrieb:

    Es hat nie funktioniert.
    Jetzt auf einmal funtz es wunderbar. Muss ich nicht verstehn.

    Dann hast du irgendwas anders gemacht als es nicht ging.
    Oder das File war schreibgeschützt, oder du hattest nicht die nötigen Rechte es zu überschreibene etc.

    (FALSE ist doch das selbe wie false oder?)

    Das selbe nicht, aber in diesem Zusammenhang gleichbedeutend.



  • hustbaer schrieb:

    _matze schrieb:

    false ist ein eingebauter (C++-)Typ

    false ist kein Typ 😃

    😉

    Ach verdammt, bool meine ich natürlich... 😃 🙄 😡


Anmelden zum Antworten