O que acontece com a String?

Delphi

21/10/2005

Ao ler um arquivo de texto qualquer (seja de 2 kb a 30 MB), em uma TStringList, ao salva-lo em uma variavel widestring com o método .Text sempre desaparecem alguns caracteres do final do arquivo. Não descobri uma lógica nem um padrão para isso, em um teste que fiz, um arquivo de 2 kb chegou a desaparecer mais caracteres que um de 16 mb.
Alguem sabe o motivo? Segue abaixo o código utilizado...

var
teste: TStringList;
teste2: widestring;
begin

teste := TStringList.Create;
teste.LoadFromFile(´teste.txt´);

teste2 := teste.Text;

AssignFile(f, ´teste2.txt´);
Rewrite(f);
write(f, teste2);

end;

Rândallo Prux


Randallo

Randallo

Curtidas 0

Respostas

Nildo

Nildo

21/10/2005

E com String normal? Ocorre o mesmo erro?


GOSTEI 0
Massuda

Massuda

21/10/2005

Acho que o Write não sabe lidar com WideStrings (você está trabalhando com Unicode?). Não consegui compilar seu exemplo, mesmo declarando F como sendo File ou Text.


GOSTEI 0
Randallo

Randallo

21/10/2005

Eu vou precisar salvar em uma váriável o conteúdo de uma StringList bem extensa.
Eu estava fazendo o teste acima para verificar o comportamento do método .Text de uma StringList, pois o mesmo retorna uma string e não sei até que tamanho ele suporta.

Realmente acho que o problema do desaparecimento dos caracteres no fim do arquivo salvo é do write, pois ao imprimir na tela o conteúdo da var teste2 ele apresenta corretamente.

A questão é a seguinte: o metodo .Text irá funcionar se a StringList tiver até o tamanho máximo de uma widestring (~2^30 characters / 4 bytes to 2GB)?


GOSTEI 0
Nildo

Nildo

21/10/2005

Para isso eu não aconselho usar métodos como carregar um arquivo desse tamanho em uma StringList. Primeiro que a memória do seu aplicativo vai subir muito, e pode estourar o SO. Eu usaria métodos mais eficientes como leitura dinâmica (ler somente o que vai aparecer na tela), usar APIs do windows para manuseio do arquivo, etc


GOSTEI 0
POSTAR