Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   read en 2010 (https://www.clubdelphi.com/foros/showthread.php?t=72440)

jathinson 18-02-2011 18:01:51

read en 2010
 
bueno nesecito una ayuda con algo que me pasa en delphi 2010
tengo un archivo lo cargo en un TFileStream;

asi
Código Delphi [-]
  path:=getpath (Edit2.Text);//saca el path del archivo
   if FileExists(path) then
  begin
     f := TFileStream.Create(path, fmOpenRead);
      if(Load(f)) then begin
       showmessage('1');
  end;
 
function TForm1.Load(Stream: TStream): Boolean;
var
  o: TObject;
begin
 o := bdecodeStream(Stream);
end;
 
function TForm1.bdecodeStream(s: TStream): TObject;
var
  r: TObject;
  c: char;
  n: Integer;
begin
  n := s.Read(c, 1);
  if(n > 0) then begin
    begin
     Edit1.Text := c;
      r := nil;
    end;
  end else begin
    r := nil;
  end;
  bdecodeStream := r;
end;
el resultado en Edit1.Text es 'd'

pero al hacer lo el cliente de torrent no da un char 'ɤ' extraño como un cuadro

lo unioco raro es que lo hago desde un solo for y ello desde varia unidades

asi
Código Delphi [-]
 
procedure TfrmSeeder.txtTorrentFileChange(Sender: TObject);
var f:TFileStream;
    i:integer;
    path:string;
    thisfile:TTorrentSubFile;
begin
  path:=StripQuotes(txtTorrentFile.Text);
  if FileExists(path) then
  begin
    try
      f := TFileStream.Create(path, fmOpenRead);
      if(TorrentFile.Load(f)) then begin
...
...
end;
 
unit TorrentFile;
..
..
function TTorrentFile.Load(Stream: TStream): Boolean;
var
  info, thisfile: TObjectHash;
  files, path, backup, backup2: TObjectList;
  fp, fn: String;
  i, j, pcount: Integer;
  sz, fs, fo: Int64;
  sha: TSHA1;
  r: Boolean;
  o: TObject;
  p: pointer;
  s:string;
begin
  Clear();
  r := False;
  sz := 0;
  try
    try
      sha := TSHA1.Create();
o := bdecodeStream(Stream);
 
...
...
end;
 
 
unit BDecode;
...
..
..
function bdecodeStream(s: TStream): TObject;
var
  r: TObject;
  c: char;
  n: Integer;
begin
  n := s.Read(c, 1);
  if(n > 0) then begin
    case c of
    'd' : r:= bdecodeHash(s);
    'l' : r:= bdecodeList(s);
    'i' : r:= bdecodeInt64(s);
    '0'..'9' : r:= bdecodeString(s,StrToInt(c));
    else r := nil;
    end;
  end else begin
    r := nil;
  end;
  bdecodeStream := r;
end;
aqui el resul nunca es 'd' si alguien sabe se lo agradesco de antemano
end;

Ñuño Martínez 21-02-2011 12:55:47

Bienvenido al Club, jathinson.

Tiene pinta de ser un tema de codificación de caracteres. Concretamente parece que tu programa utiliza UNICODE (quizá UTF-16 ó UTF-32) mientras que el archivo de datos usa ISO.

jathinson 14-03-2011 21:50:14

tk gracias
 
gracias que pena hasta ahora lo pude retomar, voy a intentarlo, lo que quiero hacer es pasar el código de burst a delphi 2010 y tengo ese problema especifico con la unidad Bdecode, en el delphi 7 funciona bien pero al compilarlo en 2010 me presenta ese comportamiento
Es un proyecto de ratos libres

Ñuño Martínez 15-03-2011 12:25:27

Ya sabes que puedes preguntar lo que necesites.


La franja horaria es GMT +2. Ahora son las 19:18:40.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi