Autor Beitrag
Stephan.Woebbeking
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 97



BeitragVerfasst: Mo 27.02.12 12:37 
Hallo *,

ich arbeite mit ZipMaster191 und kann die Find() Methode nicht nutzen. In der Funktion unten gibt es zwei markante Codeteile, deren Ergebnis in "Punkt 1" und "Punkt 2" sichtbar (Debugger) sein sollte. An "Punkt 1" ist fileData NIL und a wird mit -1 belegt (Habe auch schon bei 0 angefangen zu suchen, das hilft auch nix; auch einen Cast des String in TZMString hab ich schon probiert). Dagegen ist an "Punkt 2" in fileData korrekt die Information von dem gesuchten MANIFEST_FILE gespeichert. Kann mir jemand sagen, warum das so ist?

Danke,
Stephan


ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
procedure TFormServiceSK_M.BtnOpenUpdateFileClick(Sender: TObject);
var
  ct, a, bfLen, pos1, pos2: Integer;
  fileData: TZMDirEntry;
  buffer: PChar;
  mStream: TMemoryStream;
  manifestContent, line: String;
  stringList: TStringList;
begin
  // Ask the user for the file to be opened
  DlgOpenFW.DefaultExt := FIRMWARE_EXT;
  if ( DlgOpenFW.Execute ) then begin
    logger.Info( 'BtnOpenUpdateFileClick() FWFilename = ''' + FWFilename + '''' );
    FWFilename := DlgOpenFW.FileName;
    // Expecte a ZIP file and extract the manifest file
    ZipMaster191.ZipFileName := FWFilename;
    ct := ZipMaster191.Count; // counts the overall number of files stored in the zip archive
    logger.Info( 'Open file "' + DlgOpenFW.Filename + '" which contains ' + IntToStr( ct ) + ' single files.' );
    a := 1;
    fileData := ZipMaster191.Find( MANIFEST_FILE, a ); // ---------------------------------------> Punkt 1
    a := 0;
    repeat
      fileData := ZipMaster191.DirEntry[ a ];
      a := a + 1;
    until ( ( a >= ZipMaster191.Count ) OR ( fileData.FileName = MANIFEST_FILE ) );
    if NOT( Assigned( fileData ) ) then begin // ---------------------------------------> Punkt 2
      // Uuups, manifest not found
      logger.Error( 'Archive ' + FWFilename + ' does not contain a ' + MANIFEST_FILE + ' file!' );
    end else begin
      // Read out the content of the manifest file
      ..............
      // Having done this, we have to investigate the lines one by one
    end;

  end;
end;
SvenAbeln
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 334
Erhaltene Danke: 3



BeitragVerfasst: Mo 27.02.12 14:34 
Versuch es mal so:
ausblenden Delphi-Quelltext
1:
2:
    a := -1;
    fileData := ZipMaster191.Find( MANIFEST_FILE, a );

Laut der Hilfe, beginnt die Suche beim übergebenen Index + 1.
Stephan.Woebbeking Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 97



BeitragVerfasst: Mo 27.02.12 16:34 
Wow, das klappt, ganz herzlichen Dank dafür!!! Ich hatte die Hilfe - auf der Webseite "http://www.delphizip.org" auch studiert, aber da bin ich nicht drauf gestossen. Hab auch mehr Doku gefunden, welche Doku hast du genommen?

Vielen Dank & viele Grüße,
Stephan
SvenAbeln
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 334
Erhaltene Danke: 3



BeitragVerfasst: Di 28.02.12 11:14 
Ich kannte die Zipmaster bisher nicht, deswegen hab ich es gegoogelt.
Der erste Treffer war www.delphizip.org, dort habe ich in die Hilfe geschaut.
Der zweite Treffer bei google war übrigens eine Frage bei stackoverflow: "Delphi TZipMaster - how to use the Find method?" :wink: