Problem mit SHFileOperation bzw. TSHFileOpStruct



  • Hallo zusammen!

    Zuerst mal folgender Code (aus der FAQ).

    bool __fastcall CopyFiles( const AnsiString From, const AnsiString Dest)
    {
      bool result = ExecuteOp(From,Dest, FO_COPY);
      return result;
    }
    
    bool __fastcall ExecuteOp(AnsiString From , AnsiString  Dest, int IdOp)
    {
      TSHFileOpStruct *ShFile = new TSHFileOpStruct();
    /*
      For further help on TSHFileOpStruct plese remove the T in the type name
      and press F1
    */
      From = ExpandFileName(From);
      Dest = ExpandFileName(Dest);
    
      char zFrom[MAX_PATH];
      char zDest[MAX_PATH];
    
      for(int i=0; i<MAX_PATH; ++i )
      {
        zFrom[i] = '\0';
        zDest[i] = '\0';
      }
    
      strcpy(zFrom, From.c_str());
      strcpy(zDest, Dest.c_str());
    
      ShFile->hwnd   = GetActiveWindow();
      ShFile->wFunc = IdOp;
      ShFile->pFrom = zFrom;
      ShFile->pTo   = zDest;
    
      if (IdOp != FO_DELETE)
        ShFile->fFlags = FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR | FOF_SILENT;
      else
        ShFile->fFlags = FOF_NOCONFIRMATION | FOF_SILENT;
    
     bool result = SHFileOperation(ShFile);
     ShFile->fAnyOperationsAborted;
     delete ShFile;
     return result;
    }
    

    Das klappt alles ganz wunderbar mit den Flags (ShFile->fFlags), wie sie unten in ExecutOp() stehen. Damit kann ich ganz wunderbar kopieren, usw.

    Jetzt wollte ich das ganze frei nach MSDN (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/structures/shfileopstruct.asp) mal wie folgt aussehen lassen:

    if (IdOp != FO_DELETE)
        ShFile->fFlags = FOF_NOERRORUI | FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR | FOF_SILENT;
      else
        ShFile->fFlags = FOF_NOERRORUI | FOF_NOCONFIRMATION | FOF_SILENT;
    

    Mit dem FOF_NOERRORUI bei den Flags hinzugefügt geht aber dann plötzlich nichts mehr. Ich möchte aber unbedingt keine Fehlermeldungen.

    Weiß einer Rat?????

    Vielen Dank im Voraus,
    mid



  • Du bist dir bewusst, dass du da mit WinAPI und nicht mit VCL (abgesehen vom Funktionsgerüst) hantierst? Naja vermutlich nicht, sonst hättest du ja dahin gepostet, wo ich dich gleich hinschiebe (o;

    ->Verschoben



  • junix schrieb:

    Du bist dir bewusst, dass du da mit WinAPI und nicht mit VCL (abgesehen vom Funktionsgerüst) hantierst? Naja vermutlich nicht, sonst hättest du ja dahin gepostet, wo ich dich gleich hinschiebe (o;

    ->Verschoben

    Doch, aber da es in der BCB-FAQ stand da dachte ich ... 🤡

    Aber wer mir hilft, ist mir im Prinzip egal. 🙂

    Sorry für den Aufwand. *smile*

    greetz,
    mid



  • Seltsam 🙄 - kommt einfach gar nichts mehr, oder erhältst du eine Fehlermeldung?



  • Hi flenders,

    wenn ich bei fFlags noch FOF_NOERRORUI mit ranhänge, dann kommt keine Fehlermeldung. Dafür ist das ja und so will ich das auch. Allerdings ist dann das Problem, dass die Dateien überhaupt nicht mehr kopiert werden. Wenn ich es ohne FOF_NOERRORUI laufen lasse, dann klappt alles und die Files werden kopiert. Wenn aber mal ein Fehler auftritt, dann kommt halt ne Meldung und das will ich vermeiden. Ich will meine eigenen Messages ausgeben.



  • Ich meinte auch beim Compilieren 😉 - kann dir da aber leider auch nicht weiterhelfen 😞



  • Scheint ja mal wieder typisch M$ zu sein. wenn man keinen Fehler haben möchte, dann wird erst gar nichts getan. 😕

    Ich werd mal soweit wie möglich vorher sicher stellen, dass nix schief gehen kann, dann kann ja auch eigentlich keine großartige Fehlermeldung kommen. 😃

    Gruß,
    mid


Anmelden zum Antworten