我知道在Delphi 7中,AnsiString類型是1個字節,但在Delphi 2010中,UnicodeString類型是2個字節。在Delphi 2010中將1個字符轉換爲1個字節
下面的代碼是運作良好的Delphi 7
var
FS: TFileStream;
BinarySize: integer;
FreeAvailable, TotalSpace: int64;
fname: string;
StringAsBytes: array of Byte;
begin
..............
FS := TFileStream.Create(drive+'\'+fname+'.BIN', fmOpenReadWrite or fmShareDenyWrite);
try
BinarySize := (Length(fname) + 1) * SizeOf(Char);
SetLength(StringAsBytes, BinarySize);
Move(fname[1], StringAsBytes[0], BinarySize);
FS.Position:=172903;
FS.WriteBuffer(StringAsBytes[0], Length(StringAsBytes));
FS.Position:=173111;
FS.WriteBuffer(StringAsBytes[0], Length(StringAsBytes));
FS.Position:=173235;
FS.WriteBuffer(StringAsBytes[0], Length(StringAsBytes));
FS.Position:=173683;
FS.WriteBuffer(StringAsBytes[0], Length(StringAsBytes));
FS.Position:=173695;
FS.WriteBuffer(StringAsBytes[0], Length(StringAsBytes));
finally
FS.Free;
end;
end;
,但它並不適用於2010年德爾福工作,請幫幫忙!
你知道爲什麼它不工作。那裏有這麼多的資源。你有沒有努力去理解這個? –
http://docwiki.embarcadero.com/VCL/2010/en/SysUtils.TEncoding.GetBytes和http://docwiki.embarcadero.com/VCL/2010/en/SysUtils.TEncoding_Properties –
我也有使用'StringAsBytes := TEncoding.ASCII.GetBytes(fname);'我檢查了十六進制代碼,一切正常,但事實上,這是不正確 – nguyentu