AGB  ·  Datenschutz  ·  Impressum  







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

CopyFrom 0-Byte Fehler

Ein Thema von CReber · begonnen am 25. Mai 2004 · letzter Beitrag vom 26. Mai 2004
Antwort Antwort
Benutzerbild von CReber
CReber

Registriert seit: 26. Nov 2003
Ort: Berlin
343 Beiträge
 
Delphi 2006 Professional
 
#1

CopyFrom 0-Byte Fehler

  Alt 25. Mai 2004, 14:05
Ich verwende folgenden Code um eine gepackte File zu entpacken aber wenn ich eine 0-Byte Datei kopieren "muss" macht er bei CopyFrom einen Fehler... Hat jemand eine Idee wie das elegant umgehen kann?

Delphi-Quellcode:
procedure DecompressFiles(const Filename, DestDirectory : String);
var
  dest,s : String;
  decompr : TDecompressionStream;
  infile, outfile : TFilestream;
  i,l,c : Integer;
begin
  // IncludeTrailingPathDelimiter (D6/D7 only)
  dest := IncludeTrailingPathDelimiter(DestDirectory);

  infile := TFileStream.Create(Filename,fmOpenRead);
  try
    { number of files } 
    infile.Read(c,SizeOf(c));
    for i := 1 to c do
    begin
      { read filename } 
      infile.Read(l,SizeOf(l));
      SetLength(s,l);
      infile.Read(s[1],l);
      { read filesize } 
      infile.Read(l,SizeOf(l));
      { decompress the files and store it } 
      s := dest+s; //include the path
      outfile := TFileStream.Create(s,fmCreate);
      decompr := TDecompressionStream.Create(infile);
      try
        outfile.CopyFrom(decompr,l); // <-- HIER ENTSTEHT DER FEHLER
      finally
        outfile.Free;
        decompr.Free;
      end;
    end;
  finally
    infile.Free;
  end;
end;
Christian Reber
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#2

Re: CopyFrom 0-Byte Fehler

  Alt 25. Mai 2004, 14:13
ich weiß nicht, ob es nicht noch eleganter geht, aber du könntest entweder eine größenabfrage einbauen, ober mit einer weiteren try-except schleife arbeiten
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Benutzerbild von CReber
CReber

Registriert seit: 26. Nov 2003
Ort: Berlin
343 Beiträge
 
Delphi 2006 Professional
 
#3

Re: CopyFrom 0-Byte Fehler

  Alt 25. Mai 2004, 14:39
Delphi-Quellcode:
      try
        try
          outfile.CopyFrom(decompr,l);
        except
          on e:exception do
            Continue;
        end;
      finally
        outfile.Free;
        decompr.Free;
      end;
Ich habs jetzt so gemacht aber irgendwie funzt das auch nicht... jede file nach ner 0-byte datei wird auch 0-byte groß! irgendwo fehlt mir grad der ansatz
Christian Reber
  Mit Zitat antworten Zitat
Benutzerbild von CReber
CReber

Registriert seit: 26. Nov 2003
Ort: Berlin
343 Beiträge
 
Delphi 2006 Professional
 
#4

Re: CopyFrom 0-Byte Fehler

  Alt 25. Mai 2004, 15:07
kann mir wer sagen wie ich jetzt aus dieser infile heraus die größe einer datei auslesen kann?
Christian Reber
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#5

Re: CopyFrom 0-Byte Fehler

  Alt 26. Mai 2004, 11:36
Moin!

Wenn CopyFrom() in der Länge eine 0 bekommt, dann seeked er zum Anfang des Streams und kopiert alle vorhandenen Daten. Somit musst du einfach eine If Abfrage einbauen, ob der 2. Parameter bei CopyFrom() vielleicht 0 ist, wenn ja, dann CopyFrom() überspringen, sollte ja nicht so schwer sein.

Code:
procedure DecompressFiles(const Filename, DestDirectory : String);
var
  dest,s : String;
  decompr : TDecompressionStream;
  infile, outfile : TFilestream;
  i,l,c : Integer;
begin
  // IncludeTrailingPathDelimiter (D6/D7 only)
  dest := IncludeTrailingPathDelimiter(DestDirectory);

  infile := TFileStream.Create(Filename,fmOpenRead);
  try
    { number of files }
    infile.Read(c,SizeOf(c));
    for i := 1 to c do
    begin
      { read filename }
      infile.Read(l,SizeOf(l));
      SetLength(s,l);
      infile.Read(s[1],l);
      { read filesize }
      infile.Read(l,SizeOf(l));
      { decompress the files and store it }
      s := dest+s; //include the path
      outfile := TFileStream.Create(s,fmCreate);
      decompr := TDecompressionStream.Create(infile);
      try
        If ( l > 0 ) Then
          outfile.CopyFrom(decompr,l); // <-- HIER ENTSTEHT DER FEHLER
      finally
        outfile.Free;
        decompr.Free;
      end;
    end;
  finally
    infile.Free;
  end;
end;
MfG
Muetze1
  Mit Zitat antworten Zitat
Benutzerbild von CReber
CReber

Registriert seit: 26. Nov 2003
Ort: Berlin
343 Beiträge
 
Delphi 2006 Professional
 
#6

Re: CopyFrom 0-Byte Fehler

  Alt 26. Mai 2004, 18:13
Jetzt kommt immer die Meldung ich hätte zu wenig Arbeitsspeicher und die folgenden Dateien werden auch 0-byte groß ?!
Christian Reber
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#7

Re: CopyFrom 0-Byte Fehler

  Alt 26. Mai 2004, 19:52
Moin!

Schonmal debuggt? Wird vielleicht l immer mit 0 gelesen? Gibt es vielleicht besondere Daten die in dem Stream stehen, wenn l = 0 ist?

MfG
Muetze1
  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 08:34 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