Hallo!
jeder kennt es - vorallem von spielen. Diese übergroßen Ressourcen Dateien in denen alles drin ist
naja, ich möchte au so was probieren. Hab auch schon meine Anfänge. Aber komm leider nicht weiter. Hier ist meine
Klasse mit der ich das Realisieren möchte. Aber es Funktioniert leider nicht so.
Ich hab auch keine Ahnung wie ich folgende Sachen realisieren soll.
+ Unterordner
+ Datei Suchen
Wie ihr seht hab ich es noch nichtmal geschafft die wirkliche Datei ins Archiv zu bekommen.
Bitte, helft mir!
(ich weiß nicht mal ob ich im richtigen Forum bin - eigtl. gehört das ja eher unter Datenbank aber das kann man ja sehen wie man will =) )
Danke, Daniel
Delphi-Quellcode:
...
Const BufferSize = 32;
type TArchivFile = Record
FileName : String[100];
FileSize : integer;
FileContent : File;
Inserted : TDateTime;
Modified : TDateTime;
Status : smallint;
Visible : Boolean;
end;
type TZPAKArchiv = class
private
TArchiv : File of TArchivFile;
function GetCount: Integer;
public
Constructor Create;
procedure OpenArchiv(filename : String);
procedure CloseArchiv;
procedure DeleteFile(Position : LongWord);
function ReadFile(Position : LongWord) : TArchivFile;
procedure AddFile(ArchivFile : TArchivFile);
procedure ModFile(ArchivFile : TArchivFile; Position : LongWord);
property Count : Integer Read GetCount;
end;
implementation
{ TZPAKArchiv }
constructor TZPAKArchiv.Create;
begin
inherited;
end;
procedure TZPAKArchiv.CloseArchiv;
begin
CloseFile(TArchiv);
end;
procedure TZPAKArchiv.OpenArchiv(filename : String);
begin
AssignFile(TArchiv, filename);
if FileExists(filename) then ReSet(TArchiv) else ReWrite(TArchiv);
end;
function TZPAKArchiv.ReadFile(Position: LongWord): TArchivFile;
begin
if (Position < 0) or (Position >= FileSize(TArchiv)) then Exit
else
begin
Seek(TArchiv, Position);
read(TArchiv, Result);
end;
end;
procedure TZPAKArchiv.DeleteFile(Position: LongWord);
var Buffer : array[0..BufferSize - 1] of TArchivFile;
i, p : Integer;
StartRecord, EndRecord : Integer;
Max : Integer;
begin
Seek(TArchiv, Position-1);
StartRecord := Position+1;
EndRecord := Position;
While StartRecord < EndRecord do
begin
Max := BufferSize;
if Max > EndRecord - StartRecord then
Max := EndRecord - StartRecord;
Seek(TArchiv, StartRecord);
for i := 0 to Max -1 do
Read(TArchiv, Buffer[i]);
Seek(TArchiv, StartRecord-1);
for i := 0 to Max - 1 do
Write(TArchiv, Buffer[i]);
inc(StartRecord);
end;
Truncate(TArchiv);
end;
procedure TZPAKArchiv.AddFile(ArchivFile: TArchivFile);
var Buffer : Array[0..BufferSize - 1] of TArchivFile;
i, p : integer;
begin
Seek(TArchiv,0);
p := 0;
while not eof(TArchiv) do
begin
Read(TArchiv, Buffer[p]);
inc(p);
end;
closeFile(TArchiv);
Buffer[p+1].FileName := ArchivFile.FileName;
Buffer[p+1].FileSize := ArchivFile.FileSize;
// Buffer[p+1].FileContent := ArchivFile.FileContent;
Buffer[p+1].Inserted := ArchivFile.Inserted;
Buffer[p+1].Modified := ArchivFile.Modified;
Buffer[p+1].Status := ArchivFile.Status;
Buffer[p+1].Visible := ArchivFile.Visible;
ReWrite(TArchiv);
for i := 0 to p do Write(TArchiv, Buffer[i]);
end;
procedure TZPAKArchiv.ModFile(ArchivFile: TArchivFile; Position: LongWord);
var Datensatz : TARchivFile;
begin
Seek(TArchiv, Position-1);
Datensatz.FileName := ARchivFile.FileName;
Datensatz.FileSize := ArchivFile.FileSize;
// Datensatz.FileContent := ArchivFile.FileContent;
Datensatz.Inserted := Archivfile.Inserted;
Datensatz.Modified := Archivfile.Modified;
Datensatz.Status := ArchivFile.Status;
Datensatz.Visible := ArchivFile.Visible;
write(TArchiv, Datensatz);
end;
function TZPAKArchiv.GetCount: Integer;
begin
Result := FileSize(TArchiv)-1;
end;
...