var fs: TFileStream;
buf: array [0..14] of char; //15 karakter
adr: int64;
a:ansistring;
begin
a:='111111111111111';
fs := TFileStream.Create('data/3', fmOpenReadWrite);
adr := $24;
strcopy(buf, PChar(a));
fs.seek(adr, soBeginning);
fs.Write(buf, sizeof(buf));
fs.Free;
end;
bu kodu kullanıyorum.
ama böyle olan dosya
böyle oluyor
gördüğünüz gibi değiştirdiğim yerden sonrası bozluyor tam 14 karakter bozuluyor array değiştidiğimde bu karakter dusuyor ama 0 yaptıgımda hata alıyorum cozemedim bir turlu yardımcı olurmusunuz rıca edersem
Kodunuz Delphi7'de sorun çıkartmıyor fakat XE8'de dediğiniz gibi çift byte olarak yazıyor ve boşluklar ortaya çıkıyor. Merak ettim, araştırdım ama bir çözüm bulamadım. Sanırım bu Encoding sorunu gibi görünüyor. Blok olarak yazınca sorun oluyor fakat tek tek yazınca sorun olmuyor. Bu yüzden kodu byte byte yazacak şekilde değiştirdim. Aşağıdaki kodu test ettim, Delphi7 ve XE8'de çalışıyor.
var fs: TFileStream;
buf: array [0..14] of char; //15 karakter
adr: int64;
a:string;
i: integer;
begin
a:='111111111111111';
fs := TFileStream.Create('dosya.xyz', fmOpenReadWrite);
adr := $24;
strcopy(buf, Pchar(a));
for i := 0 to High(buf) do
begin
fs.Position := adr + i;
fs.Write(buf[i], 1);
end;
fs.Free;
end;
Delphi 7 ile XE8 arasındaki fark Unicode'dan kaynaklıdır.
sizeof(buf) 'ı kontrol ederseniz farklı sonuç çıktığını görürsünüz.
Oluşturulan bufferı Char yerine AnsiChar ile tanımlarsanız sorun çıkmaz diye tahmin ediyorum.