Announcement

Collapse
No announcement yet.

Problem beim Löschen in den Papierkorb

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

  • Problem beim Löschen in den Papierkorb

    Hallo,
    vielleicht kann mir mal jemand folgendes merkwürdiges Verhalten von Delphi (Turbo 2006) beim Löschen von Dateien erklären:

    Starte ich mein Programm nach dem compilieren aus der IDE heraus, wird die Datei zwar gelöscht, aber nicht in den Papierkorb verschoben. Starte ich die Datei nach den compilieren und einem build außerhalb der IDE, dann wird gelöscht und in den Papierkorb verschoben.

    Hier mal der Quelltext eines kleinen Beispielprogramms:
    Code:
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ShellAPI, StdCtrls;
    
    type
      TForm1 = class(TForm)
        BDelToBin: TButton;
        procedure BDelToBinClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.BDelToBinClick(Sender: TObject);
      function FileDeleteRB(AFileName:string): boolean;
      var Struct: TSHFileOpStruct;
          pFromc: array[0..255] of char;
          Resultval: integer;
      begin
         if not FileExists(AFileName) then begin
            Result := False;
            exit;
         end
         else begin
            fillchar(pfromc,sizeof(pfromc),0) ;
            StrPcopy(pfromc,expandfilename(AFileName)+#0#0) ;
            Struct.wnd := 0;
            Struct.wFunc := FO_DELETE;
            Struct.pFrom := pFromC;
            Struct.pTo := nil;
            Struct.fFlags:= FOF_ALLOWUNDO or FOF_NOCONFIRMATION
               or FOF_SILENT;
            Struct.fAnyOperationsAborted := false;
            Struct.hNameMappings := nil;
            Resultval := ShFileOperation(Struct) ;
            Result := (Resultval = 0) ;
         end;
      end;
    begin
      if FileDeleteRB('D:\testdeltorecycle.txt') then
        showmessage('Erfolgreich in den Papierkorb verschoben')
      else
        showmessage('Problem beim Verschieben in den Papierkorb');
    end;
    
    end.
    Den Code der Funktion 'FileDeleteRB' habe ich übrigens den Internet entnommen
    http://delphi.about.com/cs/...99/a/bltip0899_3.htm

    Die Textdatei, die der Funktion übergeben wird, existiert vor dem Löschen in dem Verzeichnis 'D:\' und das Verzeichnis ist auch vorhanden und gültig.

    Vielen Dank

  • #2
    Startest die Delphi mit Adminrechten (UAC)?

    Comment


    • #3
      Problem beim Löschen in den Papierkorb

      Hallo Bernhard,
      das war genau die richtige Frage: Ja, ich habe Delphi im eingeschränktem Konto mit Adminrechten laufen lassen und völlig vergessen, dass der Admin ja einen eigenen Papierkorb hat, den ich im eingeschränktem Konto gar nicht sehen kann! Bin eben mal direkt in den Admin gegangen und siehe da - alles klappt!
      Vielen Dank für den Tipp!
      Weißt Du vielleicht auch noch, ob ich Turbo Delphi denn überhaupt als nicht Admin starten kann, wenn ich es unter einem Adminaccount installiert habe?

      Gruß Andreas!

      Comment


      • #4
        Ich denke bei TD solltest du nicht unter C:\Programme installieren. AFAIK kommt diese Version noch nicht 100% mit UAC zurecht.

        Beim Start unter anderem Konto sollte wenn dann nur nötig sein die Komponenten für den user neu zu registrieren (Packages) laden. Evtl. reicht es auch den Registry-Key vom Adminkonto ins User-Konto zu kopieren.

        Hab hier D6 mit UAC am laufen - Läuft unter W7 mit UAC besser noch als unter Vista ohne UAC.

        Comment


        • #5
          ok - danke, ich werde das mal ausprobieren. Nur so zur Kenntnis: Ich habe TD nicht unter C:\Programme installiert, sondern unter einem anderen Laufwerk. Besten Dank für Deine Anmerkungen
          Bis denn!

          Comment

          Working...
          X