Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.320 Beiträge
 
Delphi 12 Athens
 
#85

Re: Pegasus: Luckies persönliches Synchronisationstool

  Alt 19. Aug 2006, 00:16
Zitat:
So, hab hier mal ein winziges "Linux und Windows, wir mögen uns nicht"-Problem:
(hatte unter Linux 'ne Datei [FAT32] gespeichert und in Windows war die dann ärgerlicher Weise nicht auffindbar ... von der Größe her könnte sie nun wieder aufgetaucht sein, nur daß man sie halt nich lesen kann und sie och noch so'nen netten Datumsfehler enthält, abgesehn von dem komischen Dateinamen)
Zitat:
---------------------------
Pegasus.exe - Fehler in Anwendung
---------------------------
Die Ausnahme "Unbekannter Softwarefehler" (0x0eedfade) ist in der Anwendung an der Stelle 0x7c81eb33 aufgetreten.


---------------------------
OK Abbrechen
---------------------------



---------------------------
Anwendungsfehler
---------------------------
Exception EConvertError in Modul Pegasus.exe bei 00007F8E.

Ungültiges Argument zum Codieren des Datums.


---------------------------
OK
---------------------------



---------------------------
Pegasus.exe - Fehler in Anwendung
---------------------------
Die Ausnahme "Unbekannter Softwarefehler" (0x0eedfade) ist in der Anwendung an der Stelle 0x7c81eb33 aufgetreten.


---------------------------
OK Abbrechen
---------------------------



---------------------------
Anwendungsfehler
---------------------------
Exception EOSError in Modul Pegasus.exe bei 0000D576.

Systemfehler. Code: 5.

Zugriff verweigert.


---------------------------
OK
---------------------------



---------------------------
Pegasus.exe - Fehler in Anwendung
---------------------------
Die Ausnahme "Unbekannter Softwarefehler" (0x0eedfade) ist in der Anwendung an der Stelle 0x7c81eb33 aufgetreten.


---------------------------
OK Abbrechen
---------------------------



---------------------------
Error
---------------------------
Runtime error 217 at 0040D576
---------------------------
OK
---------------------------
Grund siehe Bild.

FileAge lieferte -1 als Ergebnis.

Meine Lösung:
Delphi-Quellcode:
// fill Listview
with Form1 do
begin
  Listview1.Items.BeginUpdate;
  for i := 0 to slNewFiles.Count - 1 do
  begin
    ...
    ListItem.SubItems.Add(Format('%f KB', [GetFileSize(PChar(slNewFiles.Strings[i])) / 1024]));
    try
      Listitem.SubItems.Add(DateTimeToStr(FileDateToDateTime(FileAge(slNewFiles.Strings[i]))));
    except
      Listitem.SubItems.Add('[ERROR]');
    end;
    Listitem.ImageIndex := 1;
  end;
dat dann natrülich och nochma bei den anderen beiden FileAge's in Unit1 ^^

Und dann bricht SHFileOperation die Operation ab, sobald ein Fehler auftritt, also alle nachfolgenden Dateien werden nich kopiert/gelöscht, aber dennoch erfolgreich aus der Liste ausgetragen.
Ich hatte das mal so gelöst, das bei 'nem Fehler dann nochmal die Dateien einzeln verarbeitet wurden, vorallem weil ich keine andere Möglichkeit sah Programmtechnich rauszufinden bei welcher Datei(en) der Fehler auftrat.

z.B.:
Delphi-Quellcode:
Function DeleteToRecycler(Const FileNames: TDynWideStringArray): Boolean;
  Var P: PWideChar;
    i, i2: Integer;
    ShellInfo: TSHFileOpStructW;

  Begin
    Result := False;
    P := nil;
    Try
      i := 0;
      For i2 := High(FileNames) downto 0 do If FileNames[i2] <> 'Then Inc(i, Length(FileNames[i2]) + 1);
      If i = 0 Then Exit;
      P := GetMemE(i * 2 + 4);
      ZeroMem(P, i * 2 + 4);
      For i2 := High(FileNames) downto 0 do If FileNames[i2] <> 'Then Begin
        Dec(i, Length(FileNames[i2]) + 1);
        CopyMem(Pointer(FileNames[i2]), P + i, Length(FileNames[i2]) * 2);
      End;
      ZeroMem(@ShellInfo, SizeOf(TSHFileOpStructA));
      ShellInfo.Func := FO_DELETE;
      ShellInfo.opFrom := P;
      ShellInfo.Flags := FOF_NOCONFIRMATION or FOF_ALLOWUNDO or FOF_NOERRORUI;
      Result := SHFileOperationW(ShellInfo) = S_OK;
    Finally
      FreeMem(Pointer(P));
    End;
    If not Result Then Begin
      Result := True;
      For i := High(FileNames) downto 0 do
        If FileExists(FileNames[i]) Then Begin
          ZeroMem(@ShellInfo, SizeOf(TSHFileOpStructA));
          ShellInfo.Func := FO_DELETE;
          ShellInfo.opFrom := Pointer(FileNames[i]);
          ShellInfo.Flags := FOF_NOCONFIRMATION or FOF_ALLOWUNDO or FOF_NOERRORUI;
          If SHFileOperationW(ShellInfo) <> S_OK Then Result := False;
        End;
    End;
  End;
bei If SHFileOperationW(ShellInfo) <> S_OK Then könnte man sich jetzt noch reinhängen und die Datei(en) ermitteln/speichern...


zum Thema "// create not existing folders":
Zitat von PSDK > SHFILEOPSTRUCT Structure:
Copy and Move operations can specify destination directories that do not exist and the system will attempt to create them. The system normally displays a dialog box to ask the user if they want to create the new directory. To suppress this dialog box and have the directories created silently, set the FOF_NOCONFIRMMKDIR flag in fFlags.
(wäre vorallem unpraktisch, wenn man keine Dateien kopieren ließe, aber die "nötogen" Vereichnisse dennoch erstellt würden)

PS: die Häckchen, welche man vor die Dateinamen (da unten in der Liste) machen kann werden auch irgendwann mal ausgewertet?
(kann die beiden Dateien nicht vom Stick löschen ... Dateisystemfehler ... und auslassen kann ich sie ja auch nicht -.-'' )


Ach ja, weil ich's grad mal versucht hatte ... wie wäre es, wenn man da unten die Dateiliste sortieren könnte, indem man auf die süßen Spltenüberschriften klickt? *hundeblickaufsetz*
so, dat hatte ich vor ein paar Tagen verfaßt, inzwischen weiß ich auch noch, daß ein "ähnlicher" Fehler auftritt, wenn man z.B. eine Datei löscht, nachdem Pegasus die Datei eingelesen hatte, und sie nach dem Löschen anzeigen wollte (weil sie als neu/verändert erkannte ... vor dem Löschen) ... Datei existiert nicht mehr, daher Datumsfehler (-1)
Miniaturansicht angehängter Grafiken
pegasus_953.jpeg  
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat