AGB  ·  Datenschutz  ·  Impressum  







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

Error 1026 bei ShFileOperation

Ein Thema von Andidreas · begonnen am 12. Jun 2006 · letzter Beitrag vom 5. Jul 2006
Antwort Antwort
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

Error 1026 bei ShFileOperation

  Alt 12. Jun 2006, 14:26
hi @ all

hab grad ein kleines problem....

bastel mir im moment ein kleines programm für installationen und updates von programmen...
gerade versuch ich für ein programm eine update routine zu machen, bis jetzt sieht das ganze
so aus:

Delphi-Quellcode:
procedure TMain_Form.bitbtn_Upd_ProgClick(Sender: TObject);

var
strExeFrom, strExeTo : TStream;
sFromDirError, sToDirError : String;
FileOpStruct : TSHFileOpStruct;
iRC : Integer;

begin

  // Copy DELGSRV201.exe
  strExeFrom := TFileStream.Create('J:\Update\Prog\Prog1.exe', fmOpenRead);
  Try
    strExeTo := TFileStream.Create('C:\LOG\Daten_Laden\bin\Prog1.exe', fmCreate);
    Try
      strExeTo.CopyFrom(strExeFrom, strExeFrom.Size);
    Finally
      strExeTo.Free;
    End;
  Finally
    strExeFrom.Free;
  End;
  
  //Copy Directory
  sFromDirError := 'J:\Updates\Daten_Laden\Error';
  sToDirError := 'C:\LOG\Daten_Laden\';

  With FileOpStruct Do
  Begin
    wFunc := FO_Copy;
    pFrom := PChar(sFromDirError + #0);
    pTo := PChar(sToDirError + #0);
  End;

  iRC := SHFileOperation(FileOpStruct);

end;
die .exe tu ich wie ihr seht via filestream kopieren... das klappt auch soweit ganz gut...
aber beim kopieren der ordner klappt irgendwas nicht, da bekomm ich immer denn fehler nr. 1026
kann mir vielleicht jemand sagen worand das liegt???
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Error 1026 bei ShFileOperation

  Alt 12. Jun 2006, 14:33
Bist du sicher dass es 1026 ist? Was bekommst du denn angezeigt, wenn du dir mal den Text anzeigen lässt zu dem Fehlercode? 1026 ist nämlich ein nicht definierter Fehlercode. Und woher eißt du dass es 1026 ist? Du weißt zwar iRC den Rückgabewert von SHFileOperation zu, benutzt sie aber nicht weiter. Da bin ich mir nicht so sicher, ob man dem Inhalt trauen kann, weil sie eigentlich wegoptimiert wird. Desweiteren steht im PSDK:
Zitat:
Returns zero if successful, or nonzero otherwise.
da steht nicht, dass das der fehlercode ist. Ruf lieber mal danauch, wenn iRC ungleich null ist GetLastError auf und lass dir den Text mit SysErrorMessage ausgeben.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

Re: Error 1026 bei ShFileOperation

  Alt 12. Jun 2006, 14:47
oh ok dann war das wohl nicht der richtige fehler ^^

also ich krieg folgende fehlermeldung wenn ich GetLastError und SysErrorMessages mach:

"Datei kann nicht kopiert werden: 'Die Quelldatei oder vom Quelldatenträger kann nicht gelesen werden.'"

aber leider sagt mir der fehler auch nicht viel
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

Re: Error 1026 bei ShFileOperation

  Alt 12. Jun 2006, 14:58
Zitat:
With two exceptions, you cannot use SHFileOperation to move special folders from a local drive to a remote computer by specifying a network path.
könnte das hier mein fehler sein???

'J:\' ist ein netzwerklaufwerk, bzw. das laufwerk eines anderen pc's das ich mir gemappt hab


falls das der fehler ist, hat jemand eine idee, wie ich dann die daten bzw. einen kompletten ordner kopieren könnte???
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

Re: Error 1026 bei ShFileOperation

  Alt 13. Jun 2006, 16:58
nachdem ich des jetzt mit SHFileOperation net hinbekommen hab was ich machen wollt, hab ich mir mehrere funktionen und proceduren programmiert die des ganze für mich erledigen...

hier mein code, vielleicht kanns jemand anders au mal gebrauchen

Delphi-Quellcode:
procedure TMain_Form.bitbtn1Click(Sender: TObject);

var
sDir, sFolderError, sFromDir, sSearchDir, sToDir : String;
bl : Boolean;

begin


  
  // Copy Error Folder [If not Exists, Create Error Folder, Copy Files]
  sDir := 'C:\LOG\Daten_Laden\Error';
  bl := fnDirExists(sDir);

  If bl = False Then
  Begin
    CreateDir(sDir); // Ordner anlegen
  End
  Else
  Begin
    prCheck_ClearFiles(sDir);//Ordner ist bereits vorhanden, Files aus Ordner löschen!
  End;

  sFromDir := 'J:\Update\Prog1\Error\';
  sSearchDir := 'J:\Update\Prog1\Error\*.txt';
  sToDir := 'C:\LOG\Daten_Laden\Error\';
  prCopyFiles(sFromDir, sSearchDir, sToDir);

  ProgBar.Position := 60;


  // Copy File Folder [If not Exists, Create File Folder, Copy Files]
  sDir := 'C:\LOG\Daten_Laden\Files';
  bl := fnDirExists(sDir);

  If bl = False Then
  Begin
    CreateDir(sDir);
  End
  Else
  Begin
    prCheck_ClearFiles(sDir);
  End;

  sFromDir := 'J:\Update\Prog1\Files\';
  sSearchDir := 'J:\Update\Prog1\Files\*.txt';
  sToDir := 'C:\LOG\Daten_Laden\Files\';
  prCopyFiles(sFromDir, sSearchDir, sToDir);

  ShowMessage('Update was Successful');

end;

//******************************************************************************
// Examine Folder Exists
//******************************************************************************

function TMain_Form.fnDirExists(sDir : String) : Boolean;

begin

  fnDirExists := DirectoryExists(sDir);      // Prüft ob Ordner bereits angelegt wurde

end;

//******************************************************************************
// Clear Files From Folder
//******************************************************************************

procedure TMain_Form.prCheck_ClearFiles(sDir : String);

var
iAtr, iRC : Integer;
sPath, sFile : String;
recDat : TSearchRec;
bl : Boolean;

begin

  sPath := sDir + '\*.txt';
  iAtr := faAnyFile;

  iRC := FindFirst(sPath, iAtr, recDat);   // Erste Datei suchen

  If iRC = 0 Then            // Datei gefunden
  Begin
    sFile := sDir + '\' + recDat.Name;
    bl := DeleteFile(sFile);         // Datei löschen
    If bl = False Then
    Begin
      ShowMessage('Could Not Delete: ' + sFile);
    End;
  End;

  While iRC = 0 Do      
  Begin
    iRC := FindNext(recDat);         // Nach weiteren Dateien suchen
    If iRC = 0 Then
    Begin
      sFile := sDir + '\' + recDat.Name;
      bl := DeleteFile(sFile);         // Weitere Dateien vorhanden, Dateien löschen
      If bl = False Then
      Begin
        ShowMessage('Could Not Delete: ' + sFile);
      End;
    End;
  End;

  FindClose(recDat);            // Ende der Suche

end;

//******************************************************************************
// Copy Files From Dir --> To Dir
//******************************************************************************

procedure TMain_Form.prCopyFiles(sFromDir, sSearchDir, sToDir : String);

var
iAtr, iRC : Integer;
sPath : String;
recDat : TSearchRec;
strFrom, strTo : TStream;

begin

  iAtr := faAnyFile;
  sPath := sSearchDir;

  iRC := FindFirst(sPath, iAtr, recDat);      // Erste Datei im 'Von' Ordner suchen

  If iRC = 0 Then               // Datei kopieren
  Begin
    strFrom := TFileStream.Create(sFromDir + recDat.Name, fmOpenRead);
    Try
      strTo := TFileStream.Create(sToDir + recDat.Name, fmCreate);
      Try
        strTo.CopyFrom(strFrom, strFrom.Size);
      Finally
        strTo.Free;
      End;
    Finally
      strFrom.Free;
    End;
  End;

  While iRC = 0 Do
  Begin
    iRC := FindNext(recDat);            // Nächste Datei suchen
    If iRC = 0 Then               // Datei kopieren
    Begin
      strFrom := TFileStream.Create(sFromDir + recDat.Name, fmOpenRead);
      Try
        strTo := TFileStream.Create(sToDir + recDat.Name, fmCreate);
        Try
          strTo.CopyFrom(strFrom, strFrom.Size);
        Finally
          strTo.Free;
        End;
      Finally
        strFrom.Free;
      End;
    End;
  End;

  FindClose(recDat);               // Ende der suche / des kopierens

end;
wer fragen hat kann sich gerne melden
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Error 1026 bei ShFileOperation

  Alt 5. Jul 2006, 11:44
Moin Andreas,

ein paar Dinge sind mir aufgefallen.
Das Zielverzeichnis endet auf \. Auch wenn das nichts ausmachen dürfte, wäre es sauberer.

Ausserdem hast Du die Variable FileOpStruct nicht initialisiert.
Da es sich um eine lokale Variable handelt, steht in den nicht von Dir überschriebenen Feldern u.U. Datenmüll.

  FillChar(FileOpStruct,SizeOf(FileOpStruct),0); Sollte noch vor dem Befüllen der Struktur stehen, um die Struktur zu initialisieren.

Der letzte Punkt:
Da Du eh' nur die Dateien eines Verzeichisses kopieren willst, ohne Unterverzeichnis, solltest Du das auch angeben.
Für Deinen Anwendungsfall sähe das bei mir so aus:


Delphi-Quellcode:
function TMain_Form.bitbtn_Upd_ProgClick(Sender: TObject) : integer;

var
  FileOpStruct : TSHFileOpStruct;

begin
  FillChar(FileOpStruct,SizeOf(FileOpStruct),0);
  FileOpStruct.wFunc := FO_COPY;
  FileOpStruct.fFlags := FOF_NOCONFIRMATION or FOF_NOCONFIRMMKDIR or FOF_NOERRORUI or FOF_NORECURSION or FOF_SILENT;
  FileOpStruct.pFrom := PChar('J:\Update\Prog\Prog1.exe'+#00);
  FileOpStruct.pTo := PChar('C:\LOG\Daten_Laden\bin\Prog1.exe'+#00);
  Result := SHFileOperation(FileOpStruct);

  if Result <> 0 then exit;

  FillChar(FileOpStruct,SizeOf(FileOpStruct),0);
  FileOpStruct.wFunc := FO_COPY;
  FileOpStruct.fFlags := FOF_NOCONFIRMATION or FOF_NOCONFIRMMKDIR or FOF_NOERRORUI or FOF_NORECURSION or FOF_SILENT;
  FileOpStruct.pFrom := PChar('J:\Updates\Daten_Laden\Error\*.*'+#00);
  FileOpStruct.pTo := PChar('C:\LOG\Daten_Laden'+#00);
  Result := SHFileOperation(FileOpStruct);
end;
Die Flags könnten natürlich noch, je nach Bedarf, zusammengestrichen/erweitert werden (z.B. speziell im ersten Teil könnte ein FOF_RENAMEONCOLLISION zusätzlich sinnvoll sein)
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#7

Re: Error 1026 bei ShFileOperation

  Alt 5. Jul 2006, 12:50
danke chriss für deinen beitrag...
werds bei gelegnheit mal ausprobieren, kann nur noch nicht sagen wann, da ich des programm jetzt scho fertig hab, und ich des zum testen wieder bisl umbasteln muss...


aber dankschee nommel....
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  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 21:58 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