wklejanie zawartości jednego pliku w drugi

wklejanie zawartości jednego pliku w drugi
greenmag
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 353
0
Kopiuj
{$APPTYPE CONSOLE}

uses
  SysUtils, Classes;

procedure InsertWithOffset(const SourceFile, MainFile: string; Offset: Integer);
var
  Source, Main: TFileStream;

begin

  Writeln('Wklejanie pliku ' + SourceFile + ' do pliku ' +  MainFile);
  Writeln('Czekaj...');

  Source := TFileStream.Create(SourceFile, fmOpenRead);
  Main := TFileStream.Create(MainFile, fmOpenReadWrite);
    Main.Seek(Offset, soBeginning);
    Main.CopyFrom(Source, Source.Size);
  Main.Free;
  Source.Free;

  Writeln('');
  Writeln('Gotowe!');
  Readln;

end;

begin

  InsertWithOffset('BODYPROG.BIN', 'SILENT', $47800);

end.

mam oto taki kod
Plik bodyprog.bin (~660kb) jest wklejany do pliku silent (~77mb) w konkretnym miejscu
wszystko działa prawidłowo lecz teraz analogicznie potrzebuje wkleić ten plik silent do pliku sh.iso (~590mb)
tu zaczynają się problemy bo plik jest zmieniany lecz wartość w pliku zostaje wklejona zupełnie w niewłaściwy sposób
zmiany w pliku docelowym czyli w sh.iso są również w innych miejscach
jedyne co przychodzi mi do głowy to czy wina nie tkwi w tym że są jakieś ograniczenia co do rozmiaru plików bo reszta przecież się nie zmienia
jak można obejść ten problem?

obscurity
  • Rejestracja: dni
  • Ostatnio: dni
0

co to znaczy w niewłaściwy sposów / w innych miejscach? Gdzie jest zmiana a gdzie powinna być? Nie wydaje mi się żeby były jakieś problemy do 2GB, ale czy jesteś pewny znaku $ w offsecie? $47800 = 292864, być może mieszasz systemy liczbowe i źle podajesz offset.

KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Gorlice
0

To pewnie zależy od wersji Delphi. W wersjach w których można kompilować pod x64 (nie pamiętam od której ale na pewno już dawno. Myślę, że 2009 a może już 2007) na pewno poprawnie obsługiwane są nawet duże pliki, bo tam parametrem Seek, CopyFrom i w ogóle wszystkiego operującego a pliku jest Int64 a nie Integer ale nawet w starszych wersjach przy podawanych wielkościach pliku wszystko powinno działać. Kod też wygląda na poprawny... chyba że autor namieszał coś w rzeczywistym kodzie a w podanym przykładzie jest OK.

Marius.Maximus
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2205
0

jak nie jestes pewien czy dobrze robisz to zamiast pliku wpisz "TESTOWY PATTERN" i sprawdz czy jestwe wlasciwym miejscu
wtedy wykluczysz pare rzeczy

kolejna sprawa czy jestes pewien ze wiesz co robisz ?
bo ja widzę wpisywanie do pliku .iso

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.