Announcement

Collapse
No announcement yet.

wie rufe ich den api-befehl shfileoperation richtig auf???

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • wie rufe ich den api-befehl shfileoperation richtig auf???

    tagchen,

    also wenn ich den befehl shfileoperation benutzen muß(will) dann gibt es
    immer "bastelstunde".
    unten angeführtes beispiel funtioniert, aber warum muß ich bei der
    quelle '+#0' anhängen und beim ziel nicht!!!! pchar sollte doch den string
    in pchar umwandeln. kann ich mit diesem befehl auch verzeichnisse, samt
    unterverzeichnisse (löschen,kopieren,verschieben) wenn ja, wie???
    CODEBEISPIEL wäre sehr hilfreich!!!

    vielleicht erbarmt sich einer und hilft mir!!!!
    ich finde den befehl geschickt, weil man keine kopier,verbiebe und löschfunktion selbst programmieren muß, aber der aufruf und die schreibweise der parameter ist mir ein großes mysterium!!!!

    shfileop.wnd := application.handle;<br>
    shfileop.wfunc := fo_copy;<br>
    shfileop.pfrom := pchar(alterglpfad+#0);<br>
    shfileop.pto := pchar(neuergliederungspfad);<br>
    shfileoperation(shfileop);<br>

    ciao

    markus
    Herzliche Grüße

    Markus Lemcke
    barrierefreies Webdesign

  • #2
    Hallo Markus,

    jaja - die Win32-API-Funktion <b>ShFileOperation</b> stammt von Microsoft - und die Jungs haben manchmal komische Sachen drauf.

    Im Feld <b>pFrom</b> kann eine Dateiliste übergeben werden, wobei die einzelnen Dateinamen durch ein Null-Zeichen abgetrennt werden. Das Ende der Liste kennzeichnet ein doppeltes Null-Zeichen. Das sieht das so aus: "Dateiname1#0Dateiname2#0Dateiname3#0#0". Soll nur ein Dateiname übergegen werden, gilt jedoch die gleiche Syntax - so das die Funktion die Struktur "Dateiname1#0#0" erwartet (also in jedem Fall das doppelte Nullzeichen:

    Beim Feld <b>pTo</b> legt allerdings erst ein Flag (FOF_MULTIDESTFILES) fest, ob mehrere Dateinamen verwendet werden. Daher wird das doppelte Nullzeichen erst dann erwartet, wenn dieses Flag gesetzt wird.

    Im folgenden Beispiel wird das Problem mit den doppelten Null-Zeichen elegant übergabenen. Das ARRAY OF CHAR wird vorher komplett mit Null-Zeichen ausgefüllt, so das somit automatisch mindestens ein doppeltes Paar für Win32 vorhanden ist:

    <pre>
    procedure TForm1.Button2Click(Sender: TObject);
    var
    OpStruc: TSHFileOpStruct;
    frombuf, tobuf: Array [0..128] of Char;
    Begin
    fillChar( OpStruc, Sizeof(OpStruc), 0 );
    FillChar( frombuf, Sizeof(frombuf), 0 );
    FillChar( tobuf, Sizeof(tobuf), 0 );
    StrPCopy( frombuf, 'd:\brief\*.*' );
    StrPCopy( tobuf, 'd:\temp\brief' );
    With OpStruc DO Begin
    Wnd:= Handle;
    wFunc:= FO_COPY;
    pFrom:= @frombuf;
    pTo:=@tobuf;
    fFlags:= FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION;
    fAnyOperationsAborted:= False;
    hNameMappings:= Nil;
    lpszProgressTitle:= Nil;
    end;
    ShFileOperation( OpStruc );
    end;
    </pre&gt

    Comment


    • #3
      guten tag herr kosch,

      vielen dank für die erklärung!!! ich frage mich jetzt, steht irgendwo in der Winapi-hilfedatei??
      hätte ich das auch wissen müssen?? oder steht das in diesem MSDN-"Teil" drin???
      kann ich mit diesem befehl auch verzeichnisbäume kopieren oder löschen???
      oder muß ich da mit findfirst -> findnext die verzeichnisse suchen???

      vielen dank im vorraus!!!!

      mfg

      markus lemck
      Herzliche Grüße

      Markus Lemcke
      barrierefreies Webdesign

      Comment


      • #4
        Hallo Markus,

        die mit Delphi ausgelieferten Hilfedateien zum Win32-API stammen von Microsoft und müssen von Borland lizenziert werden. Leider sind die Infos aus der <i>Win32 Developers Referenz</i>-Hilfe minimal, am Beispiel von SHFileOperation wird dies drastisch deutlich:<br>
        - MS-Hilfedatei aus Delphi: ca. 8 Sätze (keine Erklärungen)<br>
        - Win32-Platform-SDK-Hilfe: Eine A4-Seite mit Erklärungen <br>
        - MSDN Library: Technischer Artikel "<i>Manipulating Files with the SHFileOperation Function</i> (dutzende A4-Seiten mit Programmbeispielen für Visual Basic) plus 3 Beiträge aus der Knowlegde Base (Probleme, Stolperstellen

        Comment

        Working...
        X