SHFileOperation Bug ?



  • Huhu Leute,

    also folgendes Problem sei kurz geschildert.
    Die Aufgabe besteht darin Verzeichnisse die sich in einem RootVerzeichnis like c:\test befinden vollständig zu kopieren. Genutzt wird die Funktion SHFileOperation WinApi.
    Folgendes passiert nun wenn man versucht von einem NT4 Rechner zu einem 2K Rechner zu kopieren.
    Wir gehen von folgenden Ordner Strukturen aus.
    NT4 - Quelle -> c:\test\ToCopy
    2K - Ziel -> c:\test
    Also der Ordner ToCopy soll mit samt seinem fiktiven Inhalt kopiert werden. Die Funktion SHFileOperation schlägt fehl mit Fehlercode 117. ? Nun legt man den Ordner ToCopy auf dem Zielsystem an, so funktioniert es.

    Startet man diesen Transfer von einem 2k Rechner zu einem 2k Rechner muss man den ToCopy Ordner vorher nicht auf dem Zielsystem erstellen. Das macht dann die Funktion.

    Allerdings sollte sie das auch von NT4 zu 2k tun!!!!!???? 😮

    Ist das ein Bug ? Ich weis nicht mehr weiter.
    Danke für die Hilfe.



  • MSDN:

    Requirements
    Version 4.00 and later of Shell32.dll

    Ist das bei Deinem WinNT 4.0 System gegeben?



  • Jep ist NT 4 mit ServicePack 6.
    Version der Shell32.dll 4.0
    😕

    Nachtrag:
    Der Code der die Funktion aufruft sieht wie folgt aus.

    char* szSrc  = new char[strlen(szSrcDir)  + 2];
    char* szDest = new char[strlen(szDestDir) + 2];
    
    // Now we have to set the mem to \0
    memset(szSrc,'\0',strlen(szSrcDir)+2);
    memset(szDest,'\0',strlen(szDestDir)+2);
    
    // Now copy the informations
    strcpy(szSrc,szSrcDir);
    strcpy(szDest,szDestDir);
    
    SHFILEOPSTRUCT CpyDir;
    
    printf("LocalPath: %s -> RemotePath: %s\n",szSrc,szDest);
    
    ZeroMemory(&CpyDir,sizeof(CpyDir));
    CpyDir.wFunc    = FO_COPY;
    CpyDir.pFrom    = szSrc;
    CpyDir.pTo  = szDest;
    CpyDir.fFlags   = FOF_NOCONFIRMMKDIR | FOF_SILENT | FOF_NOCONFIRMATION; 
    int ret = SHFileOperation(&CpyDir);
    

    Vielleicht hilft euch das weiter ?
    Wäre schön ist nämlich sehr wichtig!

    Danke 😞

    [ Dieser Beitrag wurde am 16.05.2003 um 09:07 Uhr von DaDaywalker editiert. ]



  • Okay für alle die es interessiert ich habe den Fehler gefunden.

    Also defacto als das Problem auftrat, wurden die Puffer wie folgt belegt.
    c:\test\JOB3 Job 3 sollte komplett kopiert werden inklusive dem Inhalt in dem Ordner.
    Auf dem Zielsystem \\rechner\test sollte der Ordner Job3 entstehen und die Daten beinhalten.
    Der Kopierfunktion übergab ich als Quellpointer c:\test\job3 und das Ziel war \\rechner\test\job3 (wobei der Ordner Job3 nicht existierte). Laut meinem Verständnis, sollte die Funktion den Ordner Job3 kopieren ich ging allerdings davon aus, das nur die Unterordner und die Dateien kopiert werden. Und aufgrund der Tatsache das Microsoft die Funktion so beschreibt das sie die Ordner auf dem Zielsystem anlegt ging ich davon aus einen Ordner übergeben zu können der nicht existiert.
    FALSCH GEDACHT.
    Die Lösung ist folgende. Quellpointer c:\test\job3 und der Zielpointer lautet nur \\rechner\test Windows ist dann so clever und kopiert den Ordnerinhalt plus den Namen des Ordners der der RootOrdner ist. ? 😕 ich finde das ziemlich interessant.

    Geht man zum Beispiel vom copy aus (DOS) so wird dort auch keinesfalls der Ordner selbst kopiert sondern auch nur der Inhalt der darunter ist aber wahrscheinlich muss das so sein. Also trotzdem danke für die Hilfe.

    Gruss 😮 😃


Anmelden zum Antworten