AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SHFileOperation Error 1026

Ein Thema von himitsu · begonnen am 23. Okt 2005 · letzter Beitrag vom 24. Okt 2005
Antwort Antwort
Benutzerbild von himitsu
himitsu

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

SHFileOperation Error 1026

  Alt 23. Okt 2005, 19:36
Moin,

ich hab'n winziges Problem mit SHFileOperation und zwar werden nicht alle Dateien gelöscht.
Es werden nicht alle Dateien gelöscht.
Oder besser ausgedrückt, der erste Aufruf (wo alles auf einmal übergeben wird) löscht nichts und beim zweiten Durchlauf (wo jede Datei einzeln behandelt wird) weden nur einige Dateien gelöscht und einige bleiben mit der selben Fehlermeldung ungelöscht.

Die übergebenen Dateien existieren und mit den Zugriffsrechten sollte alles OK sein.
Auch geöffnet sind die entsprechenden Dateien nicht.

Als Rückgabewert kommt immer $402 (1026) zurück.
und, wenn die Fehlereldung nicht unterdrückt wird, auch folgendes.
Zitat:
---------------------------
Fehler beim Verschieben der Datei oder des Ordners
---------------------------
Datei kann nicht verschoben werden: Die Quelldatei oder vom Quelldatenträger kann nicht gelesen werden.
---------------------------
OK
---------------------------
Weiß zufällig jemand was dieser Fehler genau bedeuten soll?
Ach ja, ich hab natürlich versucht mal einige der betroffenen Dateien zu öffenen und Notepad hat jedenfalls keine Probleme



Beim Aufruf, den Parametern und den Dateinamen sollte es allerdings keine Probleme geben.

Wenn es interessiert, die Funktion sieht so aus und in der Wide-Variante wird es noch mit der langsamen Strings gemacht ... dort sollte leichter erkennbar sein was gemacht wird.
Delphi-Quellcode:
    Function DeleteToRecycler(Const FileNames: TDynAnsiStringArray): ByteBool;
      Var P: PAnsiChar;
        i, i2: Integer;
        ShellInfo: TSHFileOpStructA;

      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 := Memory.Get(i + 2);
          (P + i)^ := #0;
          (P + i + 1)^ := #0;
          For i2 := High(FileNames) downto 0 do If FileNames[i2] <> 'Then Begin
            Dec(i, Length(FileNames[i2]) + 1);
            Memory.Copy(Pointer(FileNames[i2]), P + i, Length(FileNames[i2]) + 1);
          End;
          Memory.Zero(@ShellInfo, SizeOf(TSHFileOpStructA));
          ShellInfo.Func := foDelete;
          ShellInfo.opFrom := P;
          ShellInfo.Flags := fofNoConfirmation or fofAllowUndo or fofNoErrorUI;
          Result := SHFileOperationA(ShellInfo) = S_OK;
        Finally
          Memory.Free(Pointer(P));
        End;
        If not Result Then Begin
          Result := True;
          For i := High(FileNames) downto 0 do Begin
            Memory.Zero(@ShellInfo, SizeOf(TSHFileOpStructA));
            ShellInfo.Func := foDelete;
            ShellInfo.opFrom := Pointer(FileNames[i]);
            ShellInfo.Flags := fofNoConfirmation or fofAllowUndo or fofNoErrorUI;
            If SHFileOperationA(ShellInfo) <> S_OK Then Result := False;
          End;
        End;
      End;

    Function DeleteToRecycler(Const FileNames: TDynWideStringArray): ByteBool;
      Var S: WideString;
        i: Integer;
        ShellInfo: TSHFileOpStructW;

      Begin
        S := #0;
        For i := High(FileNames) downto 0 do If FileNames[i] <> 'Then S := FileNames[i] + #0 + S;
        If Length(S) <= 1 Then Begin Result := False; Exit; End;
        Memory.Zero(@ShellInfo, SizeOf(TSHFileOpStructW));
        ShellInfo.Func := foDelete;
        ShellInfo.opFrom := Pointer(S);
        ShellInfo.Flags := fofNoConfirmation or fofAllowUndo or fofNoErrorUI;
        Result := SHFileOperationW(ShellInfo) = S_OK;
        S := '';
        If not Result Then Begin
          Result := True;
          For i := High(FileNames) downto 0 do Begin
            Memory.Zero(@ShellInfo, SizeOf(TSHFileOpStructW));
            ShellInfo.Func := foDelete;
            ShellInfo.opFrom := Pointer(FileNames[i]);
            ShellInfo.Flags := fofNoConfirmation or fofAllowUndo or fofNoErrorUI;
            If SHFileOperationW(ShellInfo) <> S_OK Then Result := False;
          End;
        End;
      End;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: SHFileOperation Error 1026

  Alt 23. Okt 2005, 22:10
Genügend Platz hast du auf dem volume, dessen recycle bin wachsen muss?

marabu
  Mit Zitat antworten Zitat
ripper8472

Registriert seit: 17. Aug 2003
275 Beiträge
 
#3

Re: SHFileOperation Error 1026

  Alt 23. Okt 2005, 23:20
am muelleimer kanns nicht liegen, die dateien werden ja nur dorthin verschoben, nicht kopiert.

hat irgendeine anwendung noch handles auf die dateien?
Christoph
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: SHFileOperation Error 1026

  Alt 23. Okt 2005, 23:22
Das Öffnen könne mit Notepad hat nichst zu sagen. Wenn sie nicht exklusiv geöffnet ist, dann kannst du sie zwar ohne Probleme von einem anderen Prozess aus öffnen, aber löschen geht eben nicht, weil sie geöffnet ist. Geht denn das Löschen über den Explorer?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: SHFileOperation Error 1026

  Alt 24. Okt 2005, 00:59
Also, ich weiß 100% das die Dateien nicht durch 'nen exclusieven zugriff gesperrt sein sollten.
Und ja, das Löschen über'n Explorer geht ohne Probleme.

Das ist ja mein Problem, ich sehe eigentlich keinen Grund warum die Dateien sich nicht löschen lassen.

Es handelt sich dabei um insgesamt ~300 Dateien in einem Verzeichnis mit Unterverzeichnissen und knapp die hälft läßt sich löschen und der Rest nicht.
Die Dateien sollten auch alle die selben Rechte haben, da sie alle von meinem Webspace stammen und zur selben Zeit runtergeladen wurden.


hmmm?
hab jetzt einiges gefunden, allerdings scheint da auch irgendwas nicht zu stimmen
mindestens 3 verschiedene Bedeutungen...

Quelldatei nicht vorhanden = Fehlercode 1026
http://www.vbarchiv.net/forum/read.php?f=14&i=889&t=889
Die Dateien existieren aber.

Dateien können nicht gelöscht/verschoben werden (Dateisystemfehler 1026)
http://www.wintotal.de/Tipps/Eintrag...ID=196&URBID=7
http://www.moonsault.de/forum/showthread/t-33270.html
Hab die Papierkörbe gelöscht ... keine Besserung

1026 Datensatz überschreitet die maximale Länge (Record larger than maximum size)
http://www.act-computer.de/ftp/daten...20NT%204_0.htm
OK, ich übergebe zwar 300 Dateien, allerdings tritt der Fehler ja auch bei einigen Dateien auf, selbst wenn ich diese einzeln übergeben
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#6

Re: SHFileOperation Error 1026

  Alt 24. Okt 2005, 06:51
Weiß nicht ob es daran liegt, aber bei Win32 und CopyMemory gibt du zuerst das Ziel an und dann die Quelle. Wenn es bei Mem.Copy genauso ist, dann hast du dort etwas verdreht ...
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: SHFileOperation Error 1026

  Alt 24. Okt 2005, 08:26
Zitat von ripper8472:
am muelleimer kanns nicht liegen
Der Mülleimer wächst selbstverständlich auch, wenn eine DELETE Operation ausgeführt wird. Microsoft fordert übrigens mindestens 100MB Freispeicher-Reserver auf jedem Volume für ein sorgenfreies Arbeiten mit dem Dateisystem.

@himitsu: Gibt es Dateinamen, die unter keinen Umständen gelöscht werden können, obwohl du sie im Explorer löschen kannst? Könntest du einen solchen Namen hier nennen?

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: SHFileOperation Error 1026

  Alt 24. Okt 2005, 19:50
@jim_raynor:
Das Memory ist mein privates Memory-Management-System und dafür sind die Parameter schon richtig angegeben (Source, Dest, Length = von, nach, wieviel)

Zitat von marabu:
Der Mülleimer wächst selbstverständlich auch, wenn eine DELETE Operation ausgeführt wird. Microsoft fordert übrigens mindestens 100MB Freispeicher-Reserver auf jedem Volume für ein sorgenfreies Arbeiten mit dem Dateisystem.
7,5 GB sollten doch wohl noch ausreichend sein?
Und soviel sollte doch am Mülleimer nicht anwachsen können - die Dateien werden ja verschoben und das einzige was anwachsen sollte ist diese .DAT-Datei im Mülleimer.

Zitat von marabu:
Gibt es Dateinamen, die unter keinen Umständen gelöscht werden können, obwohl du sie im Explorer löschen kannst? Könntest du einen solchen Namen hier nennen?
In diesem Fall sind es fast ausschließlich PHPs, HTMs und GIFs.

Also wie geagt, ich sehe keinen Grund warum die Dateien nicht gelöscht werden können.
Es wäre also auch mal gut zu wissen was der Fehler wirklich bedeutet, also was SHFileOperation hat?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz